Ванильный Вим - это весело
Вот как я сократил количество плагинов 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>
Как видите, я обычно сопоставляю клавиши F2–F10 для компиляции, запуска, тестирования и подобных действий. Использование 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. Я многому научился на этом пути. Есть привязки клавиш, о которых я уже забыл благодаря множеству плагинов.
Эта статья изначально появилась на веб-сайте автора и публикуется с разрешения.