LINUX.ORG.RU

Собрал IDE для Python на базе Vim

 


5

6

Давно тут не было ничего интересного, все то дефолт, то очередной гном.

Сидел я тут недавно, ленился работать, прокрастинируя в код, и подумал - ну а че бы и нет? И собрал IDE для Python на базе Vim.

Оно умеет полноценный автокомплит для кода, дерево файлов (проекта) слева (скрываемое по хоткею), список переменных справа (также скрываемый по хоткею).

Насколько оно юзабельно в сравнении с тем же PyCharm? Не могу сказать, да и сравнить мне сложно, ибо во всех продуктах JetBrains у меня стоит плагин IdeaVim, привносящий туда привычные хоткеи из вима. Его я не настраивал - там все дефолтное.

OS - Fedora 34.

P.S. Всем, кто не осилил выйти из вима - :q!

>>> Просмотр (1366x768, 178 Kb)

★★★★★

Проверено: Satori ()
Последнее исправление: Satori (всего исправлений: 1)
Ответ на: комментарий от dummy

Как вы быстро прыгнули к нестандартной реализации.

попытайтесь описать алгоритм (я уже про реализацию не спрашиваю) получения «определение функции» «функции» do_shit

Это не просто функция, а переменная функция, получение определения должно отправить вас к месту присваивания.

fernandos ★★★
()
Ответ на: комментарий от dummy

Питонист прочитал статью 12 года про РНР и возмущается, спешите видеть.

Серьёзно, товарищ, вы написали бред в первом комментарии, а сейчас пытаетесь шланговать.

fernandos ★★★
()
Ответ на: комментарий от dummy

никогда не спорь с гуманитариями и php-шниками!!!

dummy ★★
()

И собрал IDE для Python на базе Vim.

Ты бы лучше рассказал, как и из чего.

(Тред не читал, сорян)

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
Ответ на: комментарий от fernandos

Чтобы код вышел лаконичным? Он-то простенький, вызов функции недорогой.

А определение функции, которое фактически не нужно, тоже недорогое?

ados ★★★★★
()
Ответ на: комментарий от akimdi

он монструозный слишком. правда и автор собрал «IDE», которая весит под гиг, в то время как VS Code 267.03 MiB + расширения:

~ on ☁️ tz4678@gmail.com 
➜ du -sh /opt/visual-studio-code
271M	/opt/visual-studio-code

~ on ☁️ tz4678@gmail.com 
➜ du -sh ~/.vscode                                            
515M	/home/sergey/.vscode

Что в итоге: имеем лютое говно, которое жрет ненамного меньше ненавистного додикам электрона и при этом не дотягивает до этого самого vscode на электроне, который НИКОГДА не позиционировал себя как IDE.

tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 1)
Ответ на: комментарий от ados
  1. Недорогое.
  2. С чего вы взяли, что они не нужны? При изменении параметром можно дёрнуть функцию, которая всё пересчитает.
fernandos ★★★
()

все то дефолт

ну это и есть дефолтный вим, который ты получешь поставив все те же несколько дефолтных плагинов. велком ту дефолт ворлд!

Keltir
()
Последнее исправление: Keltir (всего исправлений: 1)
Ответ на: комментарий от Zhbert

Прочёл комменты...

Пытаюсь хоть как-то прекратить «орать». =))) Честно. Вот сколько раз зарекался на ЛОР ходить в рабочее время… =)))

Как я погляжу, тут подтянулись «клованы», простите, спецы по поиску юзкейсов. У которых вполне себе легковесный текстовый редактор с довольно минималистичным набором плагинов внезапно стал гектар отжирать. Я всё недоумеваю – это они от Бога такие или всё таки, над ними так жизнь поиздевалась… =)))

Ну например:

du -sh ~/.vim
34M	/home/не важно/.vim

Да КАК?!? Вот как IDE для «сишника», где есть и проверка кода на косяки и ошибки (вот тут писал Подскажите, какой сейчас самый практичный статический анализатор кода для С? (комментарий)) внезапно из 34 мегабайт (со всеми используемыми в работе пирогами и плюшками, я замечу, там же и текущие бэкапы, кстати в каталоге .vim) внезапно начинает занимать 1 гигабайт?!? Вот что надо для этого сделать такого, как Господа прогневить? Не понимаю… =)))

Ну и ещё вот – Чего не хватает в моем vimrc? (комментарий) (начиная с этой ссылки и ниже). Тут даже есть куски моего .vimrc

Впрочем, отставить ржач, да… =)))

По теме.

Про сниппеты я думал, но пока не стал добавлять, пока не понял, насколько оно мне надо.

Сниппеты и, как следствие библиотеку для управления ими надо только в том случае, если Вы постоянно собираетесь писать на этом языке (языках), для которых подобрали сниппеты себе. Иначе польза сомнительна, а вред очевиден – Вы просто увеличиваете себе объём ненужных телодвижений в единицу времени, т.к. не всегда сразу сможете вспомнить есть у Вас нужный сниппет или нет.

Т.е., если не будете работать с языком постоянно, то и сниппеты под него Вам не помогут.

===

Дальше по теме. Если соберётесь писать статью, то я бы настоятельнейшим образом описать управление плагинами через pathogen. Для этого делаете:

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim

Далее, в .vimrc, прямо в самом начале:

runtime bundle/vim-pathogen/autoload/pathogen.vim
call pathogen#infect()
call pathogen#helptags()
filetype on
filetype plugin indent on

В принципе, можно просто execute pathogen#infect(), а :Helptags ввести отдельно как команду.

Все устанавливаемые через pathogen плагины будут под контролем. Я это гарантирую. =)

===

Дальше. Изо всего многообразия плагинов я бы рекомендовал ещё vimwiki. Это wiki на статичных html-страницах, которая из локальной в лёгкую (закидываем на сервак и не паримся насчёт всяких hugo) становится нормальной вики. У меня так, кстати, моя личная вики и сделана. Статичные html. Синхронизировать между собой информацию с нескольких машин, это уже сами сделаете, т.к. тривиально.

Там может быть свой синтаксис, равно как и markdown (это конвертируется, но как правило через pandoc). Но прямо в редакторе у Вас будет «вики» и список ToDo, который там так же есть. Ненужно из редактора выходить. Просто нажимаете \ww и Вы в своей локальной вики. Или \wt и Ваша локальная вики откроется в отдельном табе. Поиск по вики там тоже есть.

Вот со скринштами прямо – https://github.com/vimwiki/vimwiki. Скриншоты нотариально заверены. =)))

Вот вариант оформления списка задач. https://preview.redd.it/ueuzeatgdtz21.png?width=960&crop=smart&auto=webp&s=603ddf23667e16355f5cc0b11472ce79fc5666e3

Короче, народ от души упарывается и по оформлению и вообще. Та же wiki через CSS настраивается как угодно. Плюс к тому, там же bootstrap/jQuery можно привернуть. В общем, если надо, то разберётесь. Или спросите. =) Вот чисто примера ради – https://www.jorgee.net/blog/2015-11-04/ Раб Божий по дизайну упоролся. Т.е., основа это vimwiki, а уже сверху всё остальное понавешано. Не понимаю зачем это ему, но видимо, просто захотел.

Вот ещё assets, кстати, они тоже могут понадобиться для начала – https://github.com/zweifisch/vimwiki-assets

Самое весёлое в том, что это всё написано на vimscript. Да, неосилившие его попытались запилить neovim с lua и прочими невинными радостями, но так себе идея это всё. vim/gvim осиливают все задачи только в путь.

===

Ещё я бы рекомендовал разобраться с шаблонами файлов. В .vimrc:

" Ctrl+j -- перемещения между <+ и +> в шаблонах.
nnoremap <c-j> /<+.\{-1,}+><cr>c/+>/e<cr>
inoremap <c-j> <ESC>/<+.\{-1,}+><cr>c/+>/e<cr>

И там же:

 " Call file template from $HOME/.vim/templates/
:autocmd BufNewFile * silent! 0r $HOME/.vim/templates/%:e.tmpl

Теперь в каталоге ~/.vim/templates создаём, например, файл h.tmpl, т.е., шаблон заголовочного С-файла с содержимым:

/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*-  */
#pragma once

#ifdef __cplusplus
extern "C" {
#endif

<+ TODO +>

#ifdef __cplusplus
}
#endif

Даже мне, старому и пьяному ежу понятно что такие «шаблоны» можно запилить для любого из языков и их может быть произвольное число. И они могут быть весьма сложными.

Теперь нам остаётся сделать vim test.h, далее по Ctrl+j перепрыгнуть на <+ TODO +> вписать нужное и продолжить работу.

===

Дальше. Тут мне в треде либо послышалось, либо кто-то сказал «емакс». Умоляю Вас не использовать его! Всё началось невинно – для пользователей этой операционной системы, прикидывающейся редактором, запилили «психоаналитика». Штатного, прямо в емаксе. Видимо, пользоваться этой операционной системой по-другому не получалось, без помощи, я имею ввиду… =))) Теперь вот программа выросла, заматерела и пытается сама писать программы. Ненужно роботам этого доверять. Если психоанализ емаксеров ещё куда ни шло, в конце-концов, их психопроблемы, это их психопроблемы, то вот с написанием кода лучше ну его на фиг. =)))

P.S. И да. Забыл. У меня все настройки и плагины сведены в один vim.tar.xz. Т.е., если мне на новой машине где-то нужен мой vim/gvim, то просто wget https://мой домен/files/vim.tar.xz, распаковываю и там сразу и .vimrc и каталог .vim со всеми плагинами. Сразу.

Чего тут сложного и нафига мне эти ваши монстры в виде jetbrain(less) или vscode, я просто отказываюсь понимать. Ну и откуда там гигабайт набежал тоже. =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: Прочёл комменты... от Moisha_Liberman
  • даже автор патогена рекомендует использовать встроенный :h packages
  • зачем отдельный .vimrc? Используй ~/.vim/vimrc.
  • гигабайт вполне может набежать при использовании некоторых компилируемых плагинов (Youcompleteme этим болеет)
habamax ★★★
()
Ответ на: комментарий от habamax

Почти согласен.

даже автор патогена рекомендует использовать встроенный

С версии 8 vim, ЕМНИП. Но я не проверял все используемые мною плагины, так что пока pathogen.

зачем отдельный

Он не отдельный, он дефолтный. Т.н., «первый пользовательский файл» в $HOME/.vimrc. Второй пользовательский будет в «~/.vim/vimrc», но мне с первым удобнее. Или привычнее, если угодно. Посмотреть где какой файл можно прямо в vim, по команде :version. Или сразу – vim --version.

гигабайт вполне может набежать при использовании некоторых компилируемых плагинов (Youcompleteme этим болеет)

Я им давненько уже перестал пользоваться. Если уж мне так надо, то встроенный где-то с версии 7.х, вызываемый по Ctrl+P/Ctrl+N, весьма неплох.

===

Если уж писать что-то типа статьи-справочника, то я бы ещё упомянул о вызове манов, что частенько бывает нужно. Эта возможность есть по дефолту и просто включается в .vimrc как runtime! ftplugin/man.vim.

Теперь либо встаём курсором на слово и давим Shift+K, либо в командной строке вводим :Man <номер раздела> что_ищем. Например, :Man 3 printf. В последнем случае окно будет поделено надвое и в одной из частей будет выведен соответствующий man.

Для Gtk/Gnome есть devhelp. Вызываем над словом, где стоит курсор по Ctrl+K. В .vimrc вписываем:

"call devhelp:
autocmd Filetype c nmap <silent> <C-K> :! devhelp -s "<cword>" &<CR><CR>

Правда, в данном случае это будет работать только для С-файлов. Но пусть останется как пример.

Moisha_Liberman ★★
()
Ответ на: комментарий от Zhbert

Мда...

Именно после компиляции YCM оно разжирело до гига,

Красиво жить не запретишь…

Moisha_Liberman ★★
()
Ответ на: Прочёл комменты... от Moisha_Liberman
" Ctrl+j -- перемещения между <+ и +> в шаблонах.
nnoremap <c-j> /<+.\{-1,}+><cr>c/+>/e<cr>
inoremap <c-j> <ESC>/<+.\{-1,}+><cr>c/+>/e<cr>

Здесь портится n и N.

У меня такой вариант:

" Template <+placeholders+> navigation
func! s:next_placeholer(dir = 1) abort
    if search('<+\k*+>', a:dir ? "" : "b")
        exe "normal! va<o\<C-g>"
    endif
endfunc

nnoremap <silent> <C-j> :<C-u>call <SID>next_placeholer()<CR>
inoremap <silent> <C-j> <C-o>:call <SID>next_placeholer()<CR>
snoremap <silent> <C-j> <ESC>:call <SID>next_placeholer()<CR>
nnoremap <silent> <C-k> :<C-u>call <SID>next_placeholer(0)<CR>
inoremap <silent> <C-k> <C-o>:call <SID>next_placeholer(0)<CR>
snoremap <silent> <C-k> <ESC>:call <SID>next_placeholer(0)<CR>
habamax ★★★
()
Ответ на: Почти согласен. от Moisha_Liberman

Он не отдельный, он дефолтный. Т.н., «первый пользовательский файл» в $HOME/.vimrc. Второй пользовательский будет в «~/.vim/vimrc», но мне с первым удобнее. Или привычнее, если угодно. Посмотреть где какой файл можно прямо в vim, по команде :version. Или сразу – vim –version.

Удобнее в репозитории хранить

habamax ★★★
()
Ответ на: комментарий от habamax

Не. Уже не хочу.

Удобнее в репозитории хранить

Как-то нарвался на грабли. На свежеустановленной машине пришлось ещё и git вкрячивать. И только потом из своего git получать всё остальное добро.

Впрочем, сейчас это не важно, т.к. у меня свой liveusb на базе генточки и там всё что касается vim и gvim уже сразу выставлено и прописано. При установке на свежую машину я оттуда всё беру, с liveusb, да и не парюсь. Если по какой-то причине в очередной версии чего-то забыл, то основные конфиги (и не только для vim/gvim) как архивы сдёргиваются с моего же сервера. Даже git не нужен в таком случае.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Не. Уже не хочу. от Moisha_Liberman

использовал и что. сейчас в моем конфиге от тебя ничего не осталось. я каждые полгода вспоминаю какой вим «охеренный», пробую из него что-то рабочее сделать и успешно бросаю это гиблое дело. идея хорошая только и эти 100500 режимов не нужны, да и кнопки сложно запомнить. с дефолтными настройками даже блок кода закомментировать проблема. я уже не говорю про такую роскошь как дебаггер. vim - это артефакт 80-х, когда для спектрума, который изначально был предназначен только для набора и печати текста писали игры. там тоже как в терминале все рабочее пространство делилось на знакоместа, у которых было два свойства: цвет фона и цвет чернил… и тут тож самое: патчат шрифты чтобы была псевдографика (на спектруме ты по сути глифы отображал). и в линуксе много такого ретроградного безумия

tz4678 ★★
()
Ответ на: комментарий от tz4678

Блин...

сейчас в моем конфиге от тебя ничего не осталось.

Да я-то здесь при чём? Не, ну серьёзно? Я свой полный конфиг никому и не давал. Бррр… Или я чего-то не помню?

я уже не говорю про такую роскошь как дебаггер.

Кхммм… А с ним-то что не так? Ну есть разные варианты, но в vim/gvim я лично дебаггер никогда и не совал. Для среды Gnome есть Nemiver, для консоли есть сам по себе gdb со своим tui (если хочется) и python (если можется). Я просто 146% что никогда не пихал gdb в vim/gvim. Так что, если я в чём и виноват то прошу прощения конечно, но похоже это был не я. =)))

Прошу не обвинять меня в совращении малолетних vimом! =)))

и в линуксе много такого ретроградного безумия

Больше того скажу. Даже в винды, в божественную десяточку оно уже проникло, это «безумие». Грузим раненых в танк, отходим на макось! =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)

Поддерживаю, коллега! IDE для Python в vim это хорошая школа работы в консоли) Огромный плюс, что можно работать в мощном не тормозящем IDE на любом тапке нетбуке, была бы клавиатура.

Я сейчас сам уже не помню, каких плагинов напихал, чтобы превратить vim в полноценный IDE, думаю многим было бы интересно, поэтому ниже список плагинов из конфига:

Plugin 'gmarik/Vundle.vim'              " let Vundle manage Vundle, required
Plugin 'scrooloose/nerdtree'            " Project and file navigation
Plugin 'mitsuhiko/vim-python-combined'  " Combined Python 2/3
Plugin 'morhetz/gruvbox'                " Цветовые схемы
Plugin 'Valloric/YouCompleteMe'         " Автодополнение
Plugin 'jiangmiao/auto-pairs'           " авто ввод скобок

А текущий код в vim можно моментально испольнить в интерпретаторе командой: :!python3 %

Однако я пользовался исполнением сохранённого файла в отдельном окне:

n="prog.py"; while true; do inotifywait -qqe close_write $n; pkill -f 'python3 $n'; clear; python3 $n; done

Сохраняю файл в vim, и тут же вижу его исполнение.

Проработал так несколько лет, потом пришлось таки познакомиться с pycharm, но этот опыт обогатил и расширил мои возможности, плюс vim мне нравится) Поэтому и сейчас, когда какая мелочь, и не нужно особо мучать буфер обмена с выделением, то иду в консоль.

hikikomori ★★★
()
Ответ на: комментарий от hikikomori

Как основа

source $VIMRUNTIME/defaults.vim

call plug#begin('~/.vim/plugged')

autocmd VimEnter * if len(filter(values(g:plugs), '!isdirectory(v:val.dir)'))
  \| PlugInstall --sync | source $MYVIMRC
\| endif

" Better defaults
" https://github.com/tpope/vim-sensible
Plug 'tpope/vim-sensible'

" https://githib.com/tpope/vim-surround
Plug 'tpope/vim-surround'

" https://github.com/airblade/vim-gitgutter
Plug 'airblade/vim-gitgutter'

" File Manager
" https://github.com/scrooloose/nerdtree
Plug 'scrooloose/nerdtree'
nnoremap <C-n> :NERDTreeToggle<CR>

" Icons for nerdtree
" https://github.com/ryanoasis/vim-devicons
Plug 'ryanoasis/vim-devicons'

" Comments
" https://github.com/preservim/nerdcommenter
Plug 'preservim/nerdcommenter'
" Create default mappings
let g:NERDCreateDefaultMappings = 1

" Add spaces after comment delimiters by default
let g:NERDSpaceDelims = 1

" Use compact syntax for prettified multi-line comments
let g:NERDCompactSexyComs = 1

" Align line-wise comment delimiters flush left instead of following code indentation
let g:NERDDefaultAlign = 'left'

" Set a language to use its alternate delimiters by default
let g:NERDAltDelims_java = 1

" Add your own custom formats or override the defaults
let g:NERDCustomDelimiters = { 'c': { 'left': '/**','right': '*/' } }

" Allow commenting and inverting empty lines (useful when commenting a region)
let g:NERDCommentEmptyLines = 1

" Enable trimming of trailing whitespace when uncommenting
let g:NERDTrimTrailingWhitespace = 1

" Enable NERDCommenterToggle to check all selected lines is commented or not
let g:NERDToggleCheckAllLines = 1

" File search
" https://github.com/junegunn/fzf.vim
Plug 'junegunn/fzf.vim'
nnoremap <silent> <C-p> :Files<CR>

" Tab completion
" https://github.com/ervandew/supertab
Plug 'ervandew/supertab'

" Highlights parens
" https://github.com/frazrepo/vim-rainbow
Plug 'frazrepo/vim-rainbow'
let g:rainbow_active = 1

" https://github.com/jiangmiao/auto-pairs
Plug 'jiangmiao/auto-pairs'

" Color theme
" https://github.com/joshdick/onedark.vim
Plug 'joshdick/onedark.vim'

" Status line
" https://github.com/itchyny/lightline.vim
Plug 'itchyny/lightline.vim'
let g:lightline = {
\   'colorscheme': 'onedark',
\   'separator': { 'left': "\ue0b0", 'right': "\ue0b2" },
\   'subseparator': { 'left': "\ue0b1", 'right': "\ue0b3" },
\ }

" Linting and completion
" https://github.com/dense-analysis/ale
Plug 'dense-analysis/ale'
let g:ale_fixers = {
\   '*': ['remove_trailing_lines', 'trim_whitespace'],
\   'javascript': ['eslint'],
\   'python': ['yapf', 'isort'],
\}
let g:ale_linters = {
\   'javascript': ['eslint'],
\   'python': ['pylsp'],
\}
let g:ale_fix_on_save = 1
let g:ale_completion_enabled = 1
set omnifunc=ale#completion#OmniFunc
let g:ale_completion_autoimport = 1

" float terminal
" https://github.com/voldikss/vim-floaterm
Plug 'voldikss/vim-floaterm'
let g:floaterm_keymap_toggle = '<F10>'

call plug#end()

set encoding=utf-8

" indentation
set ai et ts=2 sts=2 sw=2 cindent
set shiftround

" text search
set hls ignorecase incsearch smartcase

" show relative line numbers
set rnu
" highlights current line
set cul
" show the vertical ruller
set cc=80

" show special characters
set list

" show matching braces
set showmatch

" wrap whole words
set wrap linebreak

" status line
set laststatus=2
set noshowmode

" performance
set lazyredraw
set ttyfast

set hidden
set noswapfile nobackup nowritebackup " noundofile
set undofile undodir=$HOME/.vim/undo

" CursorHold delay
set updatetime=250

" true color
set termguicolors

" theme
set background=dark
colorscheme onedark

" save a file as root
command! W :execute ':silent w !sudo tee % > /dev/null' | :edit!

set pastetoggle=<F2>

" window navigation
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

" shifting
vnoremap > >gv
vnoremap < <gv

" move through wrapped lines
noremap j gj
noremap k gk

" <Ctrl-l> redraws the screen and removes any search highlighting.
nnoremap <silent> <C-l> :nohl<CR><C-l>

let mapleader=" "
nnoremap <Space> <Nop>

" execute current file
nnoremap <leader>r :!%:p

tz4678 ★★
()
Ответ на: комментарий от Spoofing

юзать «ущербную» консольку

vim

Когда есть полноценный Emacs!

rupert ★★★★★
()

Я тоже хочу панельку сбоку, чтобы туда что-то выводилось на основании содержимого файла и делалось. Как её запилить? Хотелки не дефолтные. Когда-то мне нужен будет просто список функций, когда-то ключи объекта такой-то вложенности. При нажимании кнопок в панельки надо перематывать окно редактора или выполнять какие-то произвольные действия. Кстати, сюда гит интегрирован?

crutch_master ★★★★★
()
Ответ на: комментарий от Zhbert

Понадобилось написать небольшую софтинку для автоматизации, открыл на автопилоте джаву и понял, что на ней это писать дольше в три раза, и кода больше в десять раз.

Да. Я также пересел на жс.

crutch_master ★★★★★
()
Ответ на: Да, от Moisha_Liberman

Хороший вариант, кстати, спасибо.

Ну раз пошла такая пьянка…

" Template <+placeholders+> navigation
func! s:placeholder_next(dir = 1) abort
    if search('<+.\{-}+>', a:dir ? "" : "b")
        exe "normal! va<o\<C-g>"
    endif
endfunc

func! s:placeholder_accept() abort
    if search('<+.\{-}+>', "c")
        exe 'normal! 2"_x'
        call search('+>', "c")
        exe 'normal! 2"_x'
        call s:placeholder_next()
    endif
endfunc

nnoremap <silent> <C-j> :<C-u>call <SID>placeholder_next()<CR>
inoremap <silent> <C-j> <C-\><C-o>:call <SID>placeholder_next()<CR>
snoremap <silent> <C-j> <ESC>:call <SID>placeholder_next()<CR>
nnoremap <silent> <C-k> :<C-u>call <SID>placeholder_next(0)<CR>
inoremap <silent> <C-k> <C-\><C-o>:call <SID>placeholder_next(0)<CR>
snoremap <silent> <C-k> <ESC>:call <SID>placeholder_next(0)<CR>
snoremap <silent> <CR> <ESC>:call <SID>placeholder_accept()<CR>



" <+placeholder+> highlight
augroup placeholder | au!
    au BufNew,BufRead * call matchadd('Error', '<+.\{-}+>')
augroup END

https://i.imgur.com/8qKvem9.gif

habamax ★★★
()
Последнее исправление: habamax (всего исправлений: 1)

тоже раньше юзал nerdtree, но nnn гораздо лучше. А можно просто пользоваться fzf.

Lrrr ★★★★★
()

А пока ты это делал, молодёжь в бесплатном VS Code написала миллиард строк кода, выучила 5 фреймворков, 3 платформы, 100500 паттернов и обгоняет тебя, потому что у них УЖЕ всё работает) А ты настраиваешь vim. Что ты делаешь со своей жизнью?

Alve ★★★★★
()
Ответ на: комментарий от Alve

те кто пишут vscode паттерны и не используют: им нет места при разработке на python/javascript, точнее они применяются очень редко, да и то langugae-specific. вебня, епта. нам остается только рассказывать, что есть много кто хуже нас, типа 1сников, лошков, которые себя гордо именуют DBA-разрабами (не зная, что SQL язык, придуманный для домохозяек)… и так вплоть до эникеев, у многих из которых есть даже профильное образование, но программировать они и не научились. да чтобы грести бабло достаточно освоить react, попутно и nodejs-инфраструктуру выучишь и по-сути станешь фуллстаком… я это vim освоил из-за того, что мне стало стыдно перед студентом, который его запустил, а я из него только как выйти знал… настройка тайлов, вима, десктопа - это уже что-то типа фетиша, тут призывать к разуму бесполезно, потому как включается режим творца

tz4678 ★★
()
Ответ на: комментарий от sol13

еще, если глубже копнуть, то это симптом шизотипического расстройста личности. а возможно это и эволюционный механизм, страсть к изобретательству есть у небольшого числа людей и написание кода (конфигов) для меня сродни написанию сочинений и прочей графомании (у меня гуманитарное образование, я сдавал русский и литературу на 5 сейчас же даже запятые расставить не могу). я порой не могу работать пару дней, если у меня в каком-то конфиге что-то не работает. с одной стороны это целеустремленность, а сдругой - бесмысленно, так как за это не платят

tz4678 ★★
()
Ответ на: комментарий от sol13

у меня deoplete не работает

[deoplete] VimEnter Autocommands for "*"..function deoplete#enable[9]..deoplete#initiali...it#_initialize[10]..<SNR>101_init_internal_variables[11]..neovim_rpc#serveraddr, line 18
Error detected while processing VimEnter Autocommands for "*"..function deoplete#enable[9]..deoplete#initialize[1]..deoplete#init#_initialize[10]..<SNR>101_init_internal_variables[35]..VimEnt
er Autocommands for "*"..function deoplete#enable[9]..deoplete#initialize[1]..deoplete#init#_initialize[10]..<SNR>101_init_internal_variables[29]..neovim_rpc#serveraddr:
line   18:
E605: Exception not caught: [vim-hug-neovim-rpc] requires one of `:pythonx import [pynvim|neovim]` command to work
Press ENTER or type command to continue
:pythonx import sys; print(sys.path)

показУет это:

['/usr/lib/python39.zip', '/usr/lib/python3.9', '/usr/lib/python3.9/lib-dynload', '/usr/lib/python3.9/site-packages', '_vim_path_']

мне же нужен python, который установлен в ~/.asdf/shims/python. знаешь как настроить?

tz4678 ★★
()
Ответ на: комментарий от tz4678

В Vim’e не работает

" Completion
" https://github.com/Shougo/deoplete.nvim
if has('nvim')
  Plug 'Shougo/deoplete.nvim', { 'do': ':UpdateRemotePlugins' }
else
  Plug 'Shougo/deoplete.nvim'
  Plug 'roxma/nvim-yarp'
  Plug 'roxma/vim-hug-neovim-rpc'
endif
let g:python_host_prog = expand('~/.asdf/shims/python')
let g:python3_host_prog = expand('~/.asdf/shims/python')
let g:deoplete#enable_at_startup = 1

~ on ☁️ tz4678@gmail.com 
➜ ~/.asdf/shims/python
Python 3.9.6 (default, Jul 14 2021, 05:03:25) 
[GCC 11.1.0] on linux
Type "
tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 1)
Ответ на: комментарий от tz4678

дак оно же написало что нужен питоновский пакет pynvim, поставь его из pip или еще как (community/python-pynvim в репах арча)

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

он стоит. ты не видишь чтоли, что в sys.path не /home/sergey/asdf/installs/python..., а системный питон? я для управления версиями python и nodejs использую asdf. я могу поставить все пакеты глобально, через yay, но тогда у меня возникнет другая проблема: vim будет использовать питонячьи библиотеки версии python, установленной через asdf (когда нужно юзать системные). использование asdf/pyenv - это true way. я не могу отказаться от его использования из-за наличия дегенератов, ненавистников docker’a. на какой-нить бубунте доступен только python 3.7.3 вот они его только и будут использовать, в то время как у меня на хосте питон всегда последний… а есть еще дебилы с центососи

tz4678 ★★
()
Последнее исправление: tz4678 (всего исправлений: 2)
Ответ на: комментарий от tz4678

ну я не пользуюсь этой штукой и вообще не знал о ней)) Но как я понял, она устанавливает куда-то там свой питон, а вим пытается использовать системный. Т.ч

let g:python3_host_prog = '/path/to/python3'

в конфиге должно помочь

Lrrr ★★★★★
()
Ответ на: комментарий от Lrrr

у меня он есть в конфиге. я так понимаю, что nvim эту настройку читает, а vim нет

tz4678 ★★
()
Ответ на: комментарий от habamax

Круто.

Но я у меня немного другой подход. Я предпочитаю максимально простые шаблоны. А вот кодогенерация – через bash-скрипты. Т.е., если мне нужен демон, к нему сборка через autotools, то мне проще запустить мой же ./bootstrap-daemon -n <имя демона>, получить нужные файлы (все!) и потом их править. Шаблоны в таком случае мне нужны максимально простецкие.

Ну и ряд операций автоматом сразу выполняться так же может. Что-нибудь типа вот такого в .vimrc:

function AddTemplate(tmpl_file)
    exe "0read " . a:tmpl_file
    let substDict = {}
    let substDict["name"] = $USER
    let substDict["date"] = strftime("%d/%m/%y")
    exe '%s/<+\([^>]*\)+>/\=substDict[submatch(1)]/g'
    set nomodified
    normal G
endfunction

autocmd BufNewFile *.c call AddTemplate("~/.vim/templates/c.tmpl")
autocmd BufNewFile *.h call AddTemplate("~/.vim/templates/h.tmpl")

И шаблона для С-файлов:

/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 8; tab-width: 8 -*- */

/**
 * Author :  <+name+>
 * Date   :  <+date+>
 */

Это вообще максимум из того, что именно мне нужно в части шаблонов.

Собственно, из-за нежелания усложнять vim, я и не стал туда интегрировать git, gdb. Мне с ними и в сонсоли хорошо. А vim у меня не только для правки кода. Собственно, это редактор для всего текстового. Один. И сильно его перегружать функциями я не очень хочу.

===

Я бы в набор нужного ещё и DoxigenToolkit добавил. Это генератор комментов в стиле, пригодном для doxygen. Т.е., в коде пишу, например:

static int test(int a, int b) {
        return a + b;
}

Дальше встаю курсором на строку static int test(int a, int b), в командном режиме ввожу :Dox, получаю почти готовый коммент:

/**
 * @brief 
 *
 * @param a
 * @param b
 *
 * @return 
 */

===

Ещё бы добавил плагин для работы с ctags, но это уже… «На вкус и цвет, что называется».

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 3)

А вимом уже можно нормально пользоваться если у тебя на компе 4 языка в раскладках?

qtm ★★★
()
Ответ на: комментарий от mord0d

Раньше я юзал deoplete, теперь юзаю встроенное в Vim в связке с маленьким плагином, вызывающим выпадающее меню автоматом вместо наркоманского комбо-аккорда (который я регулярно забываю, лол).

а напиши, пожалуйста, подробности

ubik
()
Ответ на: комментарий от tz4678

То есть либо я шизофреник, либо просто люблю писать велосипеды, кст, эта настройка и на Golang подходит

sol13 ★★★★★
()
Ответ на: комментарий от sol13

ты о чем? у меня asdf. $ asdf python install latest и дефолтные пакеты, которые ставятся с питоном:

➜ cat ~/.default-python-packages                              
# package management
pipx
poetry

# web scrapping
beautifulsoup4
cchardet
lxml
requests[socks]

# image manipulation
Pillow

# math
#numpy

# development
ipython
python-language-server[all]
pyls-isort
pyls-black
neovim

deoplete тот как настроить? у ale автоподстановка какая-то кривая

tz4678 ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.