Поиск по сайту:

Ванильный Вим - это весело


Вот как я сократил количество плагинов Vim с 35 до шести.

<мета-кодировка="utf-8">

Когда вы запускаете Vim с опцией --clean, он отображается в «ванильном» режиме. Никаких плагинов, никаких настроек, просто возвращение к истокам. За прошедшие годы я собрал массу операторов конфигурации, некоторые из них относятся к MS-DOS или Windows 3.1. Вот в чем дело: я начну с нуля, чтобы найти хорошую начальную конфигурацию, используя только плагины, доступные в Fedora 35. Выживу ли я неделю кодирования? Я узнаю!

Вот правила: Минимум возможных операторов конфигурации и только плагины, поставляемые с Fedora 35+. Кстати, если вы не являетесь пользователем Fedora, продолжайте читать. Вы всегда можете установить эти плагины из менеджера пакетов вашей ОС вручную или с помощью менеджера плагинов Vim.

Прежде чем я начну, есть слон в комнате: вопрос о Vim или Neovim (вилке Vim). Ну, это зависит от вас. Все, что есть в этой статье, должно работать для обоих. Однако я тестировал только с Vim. Все навыки пригодятся при входе на сервер, где доступен только vi. Это может быть либо старая система UNIX, либо сервер Linux с установленным минимальным программным обеспечением для большей безопасности, либо интерактивная оболочка в контейнере, либо встроенная система, для которой пространство ценно.

Без лишних слов, вот что я свел к абсолютному минимуму, чтобы эффективно использовать Vim для кодирования:

# dnf install --allowerasing vim-default-editor \
	vim-enhanced \
	vim-ctrlp \
	vim-airline \
	vim-trailing-whitespace \
	vim-fugitive \
	vim-ale \
	ctags

Не беспокойтесь об опции --allowerasing. Просто просмотрите транзакцию установки перед подтверждением. Эта опция указывает менеджеру пакетов заменить существующий пакет nano-default-editor на vim-default-editor. Это небольшой пакет, который удаляет файлы конфигурации оболочки, чтобы установить для переменной среды EDITOR значение vim, и это необходимо, если вы хотите использовать Vim (например, с git). Это особенная вещь для Fedora. Вам не нужно будет делать это в других дистрибутивах или ОС — просто убедитесь, что переменная оболочки EDITOR установлена правильно.

Обзор

Краткий обзор того, что я считаю хорошим и чистым набором плагинов:

  • CtrlP: минимально возможный плагин нечеткого поиска (чистый vimscript).
  • Fugitive: обязательный инструмент для git
  • Конечные пробелы: показывает и исправляет конечные пробелы.
  • Авиакомпания: улучшенная строка статуса (чистый vimscript).
  • Але: выделяет опечатки или синтаксические ошибки при вводе текста.
  • Ctags: это не плагин Vim, но очень необходимый инструмент.

Существуют и другие плагины для поиска нечетких данных, такие как команда-t или мой любимый (очень быстрый) fzf.vim. Дело в том, что fzf.vim нет в Fedora, и мне нужна минимально возможная конфигурация. CtrlP вполне подойдет, и его гораздо проще настроить, поскольку он ничего не требует.

Если бы мне пришлось выбрать абсолютную минимальную конфигурацию, это было бы:

# cat ~/.vimrc
let mapleader=","
let maplocalleader="_"
filetype plugin indent on
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
set exrc
set secure

Но это, вероятно, слишком экстремально, поэтому вот немного более крупная конфигурация с моим подробным объяснением ниже:

" vim: nowrap sw=2 sts=2 ts=2 et:

" leaders
let mapleader=","
let maplocalleader="_"

" filetype and intent
filetype plugin indent on

" incompatible plugins
if has('syntax') && has('eval')
  packadd! matchit
end

" be SSD friendly (can be dangerous!)
"set directory=/tmp

" move backups away from projects
set backupdir=~/.vimbackup

" fuzzy searching
let g:ctrlp_map = '<leader><leader>'
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']
nnoremap <leader>b :CtrlPBuffer<cr>
nnoremap <leader>t :CtrlPTag<cr>
nnoremap <leader>f :CtrlPBufTag<cr>
nnoremap <leader>q :CtrlPQuickfix<cr>
nnoremap <leader>m :CtrlPMRU<cr>

" buffers and quickfix
function! ToggleQuickFix()
  if empty(filter(getwininfo(), 'v:val.quickfix'))
    copen
  else
    cclose
  endif
endfunction
nnoremap <leader>w :call ToggleQuickFix()<cr>
nnoremap <leader>d :bd<cr>

" searching ang grepping
nnoremap <leader>g :copen<cr>:Ggrep!<SPACE>
nnoremap K :Ggrep "\b<C-R><C-W>\b"<cr>:cw<cr>
nnoremap <leader>s :set hlsearch! hlsearch?<cr>

" ctags generation
nnoremap <leader>c :!ctags -R .<cr><cr>

" per-project configs
set exrc
set secure

Использование запятой для ключа ведущего

Мне нравится, когда мой ведущий ключ отображается в виде запятой, а не обратной косой черты по умолчанию. Это ближайшая свободная клавиша в Vim, когда ваши руки находятся в положении письма. Кроме того, эта клавиша одинакова для большинства раскладок клавиатуры, а \ различается в зависимости от модели или раскладки. Я редко использую локальный лидер, но подчеркивание кажется подходящим.

Дальнейшее чтение:

  • См. :help map-what-keys в справочном руководстве Vim.
  • См. неиспользуемые клавиши в Vim на Vim Tips Wiki.

Тип файла и синтаксис отключены

Далее идет очень важная команда filetype. Видите ли, Vim поставляется «на батарейках», версия 8.2 содержит подсветку синтаксиса для 644 языков, 251 определение типа файла (ftplugins) и правила отступов для 138 языков. Однако по умолчанию отступы не включены, возможно, чтобы обеспечить единый интерфейс редактирования для всех. Мне нравится включать его.

Небольшой совет: если вы редактируете очень большой файл и Vim работает медленно, вы можете отключить подсветку синтаксиса, чтобы ускорить работу. Просто введите команду :syn off.

Дальнейшее чтение:

  • См. :help filetype в справочном руководстве Vim.
  • См. :help синтаксис в Справочном руководстве Vim.
  • См. :help indent в справочном руководстве Vim.

Плагин Матчит

Vim даже поставляется с некоторыми дополнительными плагинами, которые делают некоторые функции несовместимыми, один из них весьма полезен. Плагин matchit позволяет ключу % находить соответствующие круглые скобки для работы с некоторыми языками. Обычно вы можете найти начало или конец блока (начало и конец) или теги соответствия HTML и тому подобное.

Дальнейшее чтение:

  • См. :help matchit в справочном руководстве Vim.

Файл подкачки

Одна из многих настроек, которые я хочу сохранить из своей старой конфигурации, — это использование /tmp для подкачки и создание резервных копий в отдельном каталоге у меня дома, который вам нужно создать с помощью mkdir ~/. вимбэкап. Важно понимать, что Vim создает копию под названием «файл подкачки», когда вы начинаете редактирование, и вся несохраненная работа сохраняется в этом файле. Таким образом, даже если произойдет отключение электроэнергии, ваш своп будет содержать большую часть несохраненной работы. Я предпочитаю использовать tmpfs, поскольку все мои ноутбуки и серверы защищены ИБП, и я часто экономлю. Кроме того, в большинстве случаев вы используете файлы подкачки, когда ваше SSH-соединение потеряно, а не из-за отключения электроэнергии. Файлы подкачки могут быть довольно большими для больших файлов, и я ценю свой SSD, поэтому принимаю решение здесь. Если вы не уверены, удалите этот оператор, чтобы использовать /var/tmp, что безопаснее.

Дальнейшее чтение:

  • См. :help swap-file в справочном руководстве Vim.

Плагин Fuzzy-Finder

Теперь нечеткий искатель — это плагин, без которого я не могу жить. Открытие файлов с помощью таких команд, как :Ex или :e или :tabe, нормально на сервере, когда вам нужно открывать около 20 файлов в день. При кодировании мне обычно приходится открывать сотни из них. Как я уже сказал, CtrlP отлично справляется со своей задачей. Он небольшой, без каких-либо зависимостей — чистый Vim. Он открывается комбинацией Ctrl+P, что для меня немного странно. Я знаю, что некоторые известные редакторы используют его (думаю, VSCode). Дело в том, что это уже важные сочетания клавиш Vim, которые я не хочу переопределять. Таким образом, для меня победителем является лидер+лидер (дважды нажата запятая).

ctrlp_user_command просто меняет способ получения списка файлов CtrlP. Вместо встроенного рекурсивного списка файлов (glob) он использует git ls-files, что обычно лучше, поскольку игнорирует элементы из .gitignore, поэтому такие вещи, как node_modules или другие ненужные каталоги, которые могут замедлить листинг, не мешают.

Лидер+B/T/F/Q/M<, чтобы открыть список буферов, тегов, тегов текущего файла, буфера быстрого исправления и последних использованных файлов, очень полезно. В частности, после того, как вы сгенерировали taglist с помощью ctags, это, по сути, «Перейти к определению» для сотен языков программирования — никаких плагинов не требуется! Все это встроено в Vim. Теперь, чтобы прояснить ситуацию, когда я набираю leader+B, это означает нажатие запятой, а затем нажатие клавиши B, а не вместе, как с . >Control или Shift.

Дальнейшее чтение:

  • См. :help Explore в справочном руководстве Vim.
  • См. ctrlp.vim на GitHub.

Управление буфером

Хотя в настоящее время Vim поддерживает вкладки, управление буфером является важным навыком для освоения Vim. Обычно у меня получается слишком много буферов, и мне приходится слишком часто выполнять :bdelete. Что ж, лидер+D кажется хорошим вариантом, чтобы сделать это быстрее. Мне также нравится закрывать окно Quickfix, поэтому для этого тоже есть комбинация выноска+W . Я использую это очень часто при просмотре результатов поиска.

Дальнейшее чтение:

  • См. :help buffer-hidden в Справочном руководстве Vim.

Ggrep и плагин-беглец

Если говорить о поиске, то он так же важен, как и открытие файлов. Я хочу иметь возможность просматривать кодовую базу. Для этого есть потрясающая команда :Ggrep из плагина Fugitive, которая использует git grep, который игнорирует ненужные файлы и ищет только то, что находится в git. Поскольку Shift+K является свободной клавишей в Vim, она отлично подходит для автоматического поиска термина под курсором. И, наконец, очень приятно иметь возможность вводить произвольные шаблоны поиска, используя лидер+G. Обратите внимание, что при этом открывается окно, называемое окном быстрого исправления, в котором вы можете перемещаться по результатам, переходить к следующему вхождению, предыдущему, последнему, первому и т. д. Это же окно используется для вывода данных компиляторами или другими инструментами, поэтому ознакомьтесь с ним. Я предлагаю продолжить чтение документации, если это для вас ново.

Дальнейшее чтение:

  • См. :help Quickfix в Справочном руководстве Vim.
  • Посмотрите vim-беглеца на GitHub

Поиск и общение с беглецом

Кстати, поиск с помощью клавиши / является разумным и чувствительным: если все символы в нижнем регистре, Vim выполняет поиск, игнорируя регистр. По умолчанию результаты подсвечиваются, и мне кажется, что я набрал :noh (поворот выделения) около миллиона раз. Вот почему у меня есть лидер+S, чтобы переключить это. Я предлагаю прочитать больше о поиске в руководстве позже.

Далее идут поиск и сбор. Плагин-беглец поможет вам. Используйте команду :Ggrep template, чтобы выполнить git grep, и результаты попадут в окно Quickfix. Затем просто перемещайтесь по результатам, используя команды быстрого исправления (:cn, :cp и т. д.) или просто используйте :CtrlPQuickfix (или лидер+Q) для их визуальной прокрутки. Что хорошо в интеграции быстрого исправления CtrlP, так это то, что вы можете выполнять дальнейший поиск результатов, вводя текст для сопоставления имен файлов или содержимого, если это имеет смысл, — поиск результатов поиска.

Дальнейшее чтение:

  • См. :help grep в справочном руководстве Vim.
  • См. :help noh в справочном руководстве Vim.
  • Посмотрите vim-беглеца на GitHub

Cтеги

Leader+C для создания файла ctags для лучшей навигации полезен при работе с новой кодовой базой или при выполнении более длительного сеанса кодирования с большим количеством переходов. вокруг. Ctags поддерживает сотни языков, и Vim может использовать все эти знания для навигации по нему. О том, как его настроить, позже. Обратите внимание, я уже обсуждал лидер+T, чтобы открыть нечеткий поиск по всем тегам, помните? Это то же самое.

Дальнейшее чтение:

  • См. :help ctags в справочном руководстве Vim.
  • Посетите сайт Universal Ctags.

Сопоставление клавиш

Хорошей идеей является возможность переопределить любые другие настройки в проектах, создав файл .vimrc в каталоге проекта. Просто поместите его в (глобальный) .gitignore, чтобы вам не приходилось редактировать тысячи файлов git ignore в каждом проекте. Такой проект .vimrc может выглядеть примерно так (для проекта C/C++ с GNU Makefile):

" coding style
set tabstop=4
set softtabstop=4
set shiftwidth=4
set noexpandtab
" include and autocomplete path
let &path.="/usr/local/include"
" function keys to build and run the project
nnoremap <F9> :wall!<cr>:make!<cr><cr>
nnoremap <F10> :!LD_LIBRARY_PATH=/usr/local/lib ./project<cr><cr>

Как видите, я обычно сопоставляю клавиши F2F10 для компиляции, запуска, тестирования и подобных действий. Использование F9 для вызова make звучит правильно. Помните синюю Borland IDE из MS-DOS?

Как упоминалось ранее, рекомендуется игнорировать теги .vimrc и tags (генерируемые ctags) глобально, чтобы не было необходимости обновлять их. каждый каждый .gitignore:

# git config --global core.excludesfile ~/.gitignore
# cat ~/.gitignore
/.vimrc
/tags
/TAGS

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

" CTRL-] is hard on my keyboard layout
map <C-K> <C-]>
" CTRL-^ is hard on my keyboard layout
nnoremap <F1> :b#<cr>
nnoremap <F2> :bp<cr>
nnoremap <F3> :bn<cr>
" I hate entering Ex mode by accident
map Q <Nop>

Дальнейшее чтение:

  • См. :help map в справочном руководстве Vim.

Все функциональные клавиши в Vim бесплатны, за исключением F1, которая обязательно поможет. Мне не нужна помощь, не то чтобы я уже знал все о Виме. Нисколько. Но при необходимости я могу просто ввести :help. А F1 – это ключевая клавиша, очень близкая к клавише Esc. Мне нравится использовать для этого замену буфера (:b#) и F2-F3 для перехода к следующему/предыдущему. Чем больше вы работаете с буферами, тем больше вам это понадобится. Если вы еще не использовали Ctrl+^, советую к этому привыкнуть. О, вы когда-нибудь входили в режим Ex с уродливым типом :visual? Многие новички понятия не имели, как выйти из этого режима Vim. Меня это просто смущает, так как я редко им пользуюсь.

Знакомство с ctags — это ключ к успеху в Vim. Этот инструмент поддерживает сотни языков и может легко создавать теги для файлов, которые вы не хотите создавать, поэтому я предлагаю игнорировать типичные ненужные каталоги:

# cat ~/.ctags.d/local.ctags
--recurse=yes
--exclude=.git
--exclude=build/
--exclude=.svn
--exclude=vendor/*
--exclude=node_modules/*
--exclude=public/webpack/*
--exclude=db/*
--exclude=log/*
--exclude=test/*
--exclude=tests/*
--exclude=\*.min.\*
--exclude=\*.swp
--exclude=\*.bak
--exclude=\*.pyc
--exclude=\*.class
--exclude=\*.cache

Плагин авиакомпании

Нельзя забывать и о плагине авиакомпании Vim. Из двух в Fedora этот легкий, не требует никаких внешних зависимостей и работает «из коробки» со всеми моими шрифтами. Вы можете настроить его, есть темы и тому подобное. Мне просто нравятся настройки по умолчанию.

Я должен упомянуть, что существует два основных проекта ctag: Exuberant Ctags и Universal Ctags. Последняя представляет собой более современную вилку. Если в вашем дистрибутиве он есть, используйте его. Если вы используете Fedora 35+, вам нужно знать, что теперь вы используете Universal Ctags.

Заворачивать

Подводя итог, вот что я предлагаю. Постарайтесь, чтобы ваша конфигурация Vim была гладкой и чистой. Это окупится в будущем. После того, как я переключился, мне пришлось заново изучать команды «записать и выйти», потому что я все время случайно набирал их как :Wq, и у меня был «взлом» в старой конфигурации, который на самом деле сделал то, что я имел в виду. Хорошо, это может быть действительно полезно и пригодится — надеюсь, вы поняли, что я имею в виду:

:command Wq wq
:command WQ wq

И последний небольшой совет: вам, возможно, придется часто менять конфигурацию Vim по умолчанию, пока вы находите золотую середину того, что я вам здесь представил, и свой собственный вкус. Используйте следующий псевдоним, чтобы вам не приходилось постоянно искать в истории. Поверьте мне, когда пользователь Vim ищет в истории запрос "vim", ничего не имеет значения:

alias vim-vimrc='vim ~/.vimrc'

Вот оно. Возможно, это поможет вам ориентироваться в богатом мире Vim без тонны плагинов. Ваниль Вим – это весело!

Чтобы опробовать то, что вы только что прочитали, установите пакеты и проверьте конфигурацию:

test -f ~/.vimrc && mv ~/.vimrc ~/.vimrc.backup
curl -s https://raw.githubusercontent.com/lzap/vim-lzap/master/.vimrc -o ~/.vimrc
mkdir ~/.vimbackup

Особая благодарность Марку Деопу и Мелани Корр за рецензирование этой статьи.

Обновление: Я выжил! Единственная проблема, с которой я столкнулся, — это другой порядок результатов плагина CtrlP. Нечеткий алгоритм для файлов отличается от плагина fzf.vim, поэтому файлы, которые я раньше находил с помощью различных поисковых запросов, теперь не работают. В итоге я установил пакет fzf из Fedora, который поставляется с функцией vim FZF, которую можно привязать к комбинации лидеров для более релевантного поиска файлов. См. обновленный файл конфигурации в моем репозитории GitHub. Я многому научился на этом пути. Есть привязки клавиш, о которых я уже забыл благодаря множеству плагинов.

Эта статья изначально появилась на веб-сайте автора и публикуется с разрешения.

Статьи по данной тематике: