- Введение
- Vim не единственный редактор
- Буферы, буферы, буферы
- Как стать продвинутым вимером
- Как установить
- Когда не стоит учить вим
- Мысли о плагинах
- Написание прозы в vim
- Несколько рецептов из моей “поваренной книги vim”
- Поиск и окно quickfix
- Примечание о терминалах на macos
- Прочие плагины
- Работа с содержимым по модели “существительное — глагол”
- Чужой среди своих
- 🤔 зачем редактировать текст без мыши?
Введение
Я очень люблю редактор Vim, использую его в своей работе (для написания кода) уже больше четырех лет и хочу поделиться своим опытом его использования.
Эта статья — не набор “волшебных команд” и рецептов (cookbook, как называют такие наборы по-английски), хотя они тут тоже присутствуют, а, скорее, попытка описать, как общие принципы построения эргономичных интерфейсов можно применить в практике использования Vim, чтобы сделать из него удобную и эффективную среду работы с текстами.
Эта статья также не является tutorial’ом для начинающих пользователей Vim, хотя и им (а также пользователям Emacs) может быть интересна, поскольку некоторые упоминаемые принципы являются достаточно общими и действуют не только в системах редактирования текстов, а вообще везде, где идет речь об использовании компьютера для редактирования чего-либо.
По умолчанию Vim настроен очень старомодно, и эта настройка подразумевает, что пользователь при работе с текстом будет мыслить метафорами пятидесятилетней давности, как будто бы сейчас заря эпохи UNIX. Однако дизайн Vim позволяет сделать несколько настроек, после которых система станет выглядеть вполне прилично и станет работать весьма эффективно, сочетая в себе полезные черты и древних юниксовых инструментов работы с текстом, и современных WYSIWIG-процессоров, при этом обходя, насколько это возможно, присущие им недостатки. Вот об этих настройках и приемах их использования и пойдет речь.
Vim не единственный редактор
Есть много других интересных редакторов. Atom и Microsoft Visual Studio Code развились настолько, что вполне практично использовать браузерные нативные приложения. Sublime Text остаётся прекрасным приложением. IntelliJ IDEA теперь имеет бесплатную версию Community Edition. Все они поддерживают режимы наподобие Vim и достойны того, чтобы вы попробовали их в определённых ситуациях.
Программисты-новички часто спрашивают меня, какой редактор выбрать. И я всегда предлагаю начать с Sublime Text. У него знакомый интерфейс, прекрасная экосистема плагинов с актуальной подсветкой синтаксиса, он хорошо работает на macOS, Windows и Linux.
Если вы учитесь программировать, то вам не нужно забивать голову странными таинственными комбинациями символов и разными режимами редактирования только для перемещения и изменения текста на экране. Хотя кто-то потом выберет Vim и отметит его скорость и мощь.
Лучший редактор для Java, пожалуй, IntelliJ IDEA. Версия Community Edition бесплатна и имеет все возможности, которые, вероятно, понадобятся современному Java- или Kotlin-разработчику. Здесь хорошая встроенная поддержка Maven-сборки, качественная интеграция с Git, невероятная поддержка рефакторинга, интеллектуальное завершение набираемого текста, классные подсказки параметров функций, умное индексирование, поиск лучше ctags, интерактивный отладчик.
Я не пробовал Visual Studio Code, но могу воспользоваться им, когда начну писать на TypeScript, поскольку оба разработаны Microsoft и хорошо работают вместе. Я видел несколько видеороликов и впечатлён его возможностью завершать набираемый текст. Да и вообще читал много положительного о нём.
NeoVim выглядит интересно, но я не планирую его пробовать. При своём появлении редактор мог похвастаться управлением асинхронными задачами и нативными терминалами, но эти возможности уже добавлены в основную функциональность Vim.
Буферы, буферы, буферы
Я убеждённый сторонник использования буферов. Я пытался работать с вкладками, но не нашёл в них пользы. Вкладки — это дополнительный способ спрятать информацию, а чтобы в них переходить, нужно запоминать дополнительные сочетания клавиш или команды. Если у вас tmux, то проще открыть в другой панели Vim.
С буферами легко разобраться: после запуска Vim любой открытый или созданный вами файл превращается в именованный буфер. Вы можете просматривать их с помощью команды :buffers и перемещаться к какому-то из них с помощью :buf <name>, где <name> — любая часть имени файла буфера. Либо с помощью номеров, которые выводятся по команде :buffers.
Если вы запускаете Vim из командной строки с несколькими файлами в виде аргументов, то каждый файл уже будет открыт в буфере. Если вы установили vim-unimpaired, то для простой навигации между буферами помогут биндинги [b и ]b.
Я существенно ускорил этот процесс, забиндив на клавишу ; FZF-команду :Buffers, так что по одному нажатию кнопки получаю список буферов с функцией нечёткого поиска. Например, если я открыл в командной строке три файла vim foo.txt bar.txt quux.txt, то для перехода к quux.txt достаточно набрать ;qEnter.
Иногда я случайно создаю буферы, например, когда пытаюсь открыть файл, ввожу :e и слишком быстро жму Enter. Команду :bd можно использовать для стирания буфера и удаления его из списка, но тогда ещё закроется окно Vim или сплит, в котором открыт этот буфер.
Если нужно переименовать, сделать chmod или удалить файл, то можете перейти в терминал и внести изменение, но тогда буфер Vim перестанет быть синхронизирован и покажет раздражающее предупреждение «File is no longer available». Лучше взять NERDTree и подсвечивать текущий файл с помощью :
NERDTreeFind, нажав m для изменения и выбрав действие вроде перемещения или переименования. Я предпочитаю vim-eunuch, добавляющий ряд команд: :Chmod применяет chmod к текущему файлу, :Rename переименовывает файл в его родительской директории, :
Как стать продвинутым вимером
1. Изучите русскоязычную документацию и попробуйте команды, которые могут пригодиться в работе. Если что-то не понимаете или считаете какие-то команды лишними — не тратьте на них время. Vim необъятен, и большинство его возможностей вам не понадобятся — они нужны для специфичных задач.
2. Прочтите список рекомендованной литературы. Во время чтения помните, что лучше всего материал усваивается в том случае, если подкрепить его практикой.
3. Выберите плагины для индивидуальной настройки редактора. Это для тех, кому десктопная версия Vim понравилась больше плагина в VS Code.
4. Присмотритесь к эргономичным клавиатурам с настраиваемым расположением клавиш. Возможно, какая-то из них поможет быстрее освоить возможности Vim.
Как установить
Перейдите на сайт vim.org и поставьте подходящую версию Vim на компьютер. Десктопный редактор — это полигон для тренировок. Здесь вы можете запустить тестовый проект или начать писать текстовые заметки. Основная задача: привыкнуть к новому сочетанию клавиш, научиться быстро переключаться между режимами и перестать пользоваться мышкой с трекпадом.
После установки перейдите в раздел «Справка» и выберите вкладу «Учебник Vim» — это интерактивная обучающая программа и минимум, необходимый для работы с редактором. Учебник состоит из семи уроков, по ходу которых вы познакомитесь с основными командами и сможете медленно обрабатывать код.
Чтобы постоянно не возвращаться к учебнику — рекомендуем установить на рабочий стол фирменные обои или распечатать шпаргалку с командами Vim. Когда выучите команды и сможете ими пользоваться без шпаргалок — переходите на следующий этап и попробуйте использовать Vim на реальном проекте.

Когда не стоит учить вим
Отдельно стоит сказать, что не стоит учить вим одновременно с тем, что вы собираетесь делать внутри него. Когнитивная нагрузка при изучении вима настолько высокая, что у вас не будет оставаться никакой энергии на изучение нового языка, фреймворка или, даже, программирования в целом. На вим имеет смысл смотреть тогда, когда вы уже спокойно работаете и хотите новых острых ощущений.
Другой важный аспект — готовность принять идеологию вима. Нередко происходит ситуация, когда программист садится за вим и при этом не начинает пользоваться вимом. Он продолжает использовать стрелки и практически не выходит в командный режим. Такой способ обучения виму самый опасный.
Обучение виму — процесс сложный морально. Дело в том, что опыт сам по себе не делает вас лучше в чем-то. Научившись как-нибудь набирать текст, человек и через много лет будет делать это как-нибудь (не по скорости, а по эффективности работы с ним). То же самое касается использования редакторов.
Для повышения своей эффективности необходимо постоянно наблюдать за своими действиями, отслеживать те, что занимают слишком много времени, читать статьи и книги в поисках новых способов решения старых проблем. Такой подход, конечно же, важен не только при работе с вимом и даже не только в программировании, но именно в виме по-другому успеха достичь невозможно.
Во время обучения нельзя себе давать слабину и действовать из принципа «сейчас сделаю хоть как-нибудь, а потом разберусь». Незаметно для вас сформируются неправильные привычки и дальнейший рост остановится. Если вы к этому не готовы, то изучение стоит отложить.
Мысли о плагинах
Экосистема плагинов процветает благодаря недавним улучшениям в Vim и VimL, например управлению асинхронными процессами и некоторым обязательным типам (indispensable types). Новый сайт с плагинами VimAwesome облегчил поиск популярных плагинов и содержит хорошо структурированные документы и инструкции по установке.
В некоторых отзывах на мои предыдущие статьи критиковалось использование Vim с большим количеством плагинов. Часть таких отзывов можно отнести к понятным подозрениям: любая система, позволяющая добавлять неконтролируемые расширения для изменения любой своей части без ограничений, легко может превратиться в бардак.
Но плагины для Vim не так плохи. Отладка взаимодействия между плагинами Х и Y обычно предполагает гугление по фразе «vim X with Y», и мне пришлось делать это лишь один или два раза. Однажды я столкнулся со странностью, для решения которой пришлось использовать двоичный поиск (binary-search) и переименовать один плагин, чтобы он грузился перед другим. Я не хвастаюсь, но пока это единственная проблема во взаимодействии плагинов, с которой я столкнулся.
Отчасти неприятие плагинов — своеобразная пуристская враждебность к отклонению от основного набора функциональности Vim. Но если вы используете Vim, то уже входите в подмножество людей, которым нужно быстрое и эффективное редактирование текста, так что это похоже на группу сумасшедших, спорящих о том, кто из них наиболее эксцентричен.
Люди, которые выбрали плагины вроде EasyMotion или vim-sneak, будут утверждать, что работают эффективнее пользователей ванильного Vim. А пользователи ванильного Vim скажут, что они эффективнее тех, кто не выбрал Vim, и т. д.
Также я слышал о практическом сопротивлении использованию плагинов, когда плагину нужна версия Vim с Ruby, или Python, или ещё с чем-то вкомпилированным, а может, плагину нужно самого себя скомпилировать. Vim 7 привнёс в язык много существенных изменений, так что многие плагины написаны на чистом VimL и не нуждаются в дополнительных языковых зависимостях.
Моё мнение: если плагин предоставляет полезную функциональность, которую я хочу встроить в Vim, то его стоит установить. С другой стороны, я стараюсь обходиться минимальным количеством плагинов, чтобы избежать проблем при взаимодействии и поддерживать высокую производительность при запуске Vim и просмотре файлов.
Написание прозы в vim
Возможность писать не отвлекаясь важна. Для этого есть несколько приятно выглядящих нативных и браузерных приложений, но я хотел работать с Vim, поэтому придумал решение.
Прекрасный плагин goyo.vim добавляет в буфер много функций и прячет всё лишнее. Он распознаёт status bar’ы Airline/Powerline/Lightline и тоже их прячет, ну, по большей части. Это плюс несколько других хитростей в настройке я называю режимом прозы:
function! ProseMode()
call goyo#execute(0, [])
set spell noci nosi noai nolist noshowmode noshowcmd
set complete =s
set bg=light
if !has('gui_running')
let g:solarized_termcolors=256
endif
colors solarized
endfunction
command! ProseMode call ProseMode()
nmap p :ProseMode<CR>Эту команду я привязал к p. Она включает Goyo и избавляется от всяких забавных вещей, полезных при написании кода, например отступов при вводе скобок. Также плагин меняет цветовую схему с моей обычной тёмной на светлую версию Solarized.
Команда также заставляет функцию автозавершения вытаскивать слова из словаря, когда я нажимаю Tab в надежде, что могу писать быстрее. Эта фича всё ещё в разработке, но время от времени бывает полезна.
Несколько рецептов из моей “поваренной книги vim”
Дальше я приведу несколько команд и приемов использования Vim, которые я считаю полезными для себя, но, в принципе, их использование или неиспользование — уже дело вкуса и личных предпочтений, а также набранного опыта использования Vim. Вполне возможно, что для каких-то описанных мной ниже задач есть более эффективные способы решения.
:g//t$ — скопировать строки, содержащие подсвеченное значение, в конец файла. Если, например, надо быстро понять, как глобальная переменная (sic! — а что делать, в legacy-коде они встречаются) используется в модуле.
:g//d — удалить строки, содержащие подсвеченное значение:g!//d — удалить строки, НЕ содержащие подсвеченного значения
Список полезных, но редко используемых команд с нетривиальным синтаксисом, которые сами не запомнятся от частого употребления, лучше записать в шпаргалку. Например, можно записывать такие и подобные вещи вещи:
Заменить каждое вхождение нескольких пустых строк на одну пустую строку (чтобы между параграфами стал одинаковый промежуток в одну линию)::v/./,/./-j
Убрать пустые строки (в визуальном режиме):'<,’>g/^$/d
Раздвинуть подряд идущие строки (обратное предыдущему действие, каждая строка станет параграфом) Нужно при форматировании текста под 76 символов, из формата, как его сохраняет Word, когда каждый абзац становится строкой в текстовом файле.:'<,’>s/$/r/g
Показали свою полезность следующие аккорды (фрагмент из _vimrc)” по Alt-1 редактировать текущее словоnnoremap <M-1> ciw
” по Alt-5 изменять хвост текущего словаnnoremap <M-5> cw
Поиск и окно quickfix
Ag — это новый ack, который был новым grep. На первый взгляд, лучший способ использовать ag из Vim — ack.vim, но это заблуждение, потому что ag.vim устарел, но ack.vim поддерживает и ack, и ag.
ack.vim предоставляет команду :Ack, которая берёт аргументы так же, как ag выполняется из командной строки, за исключением того, что она открывает окно QuickFixсо списком результатов поиска:
Обратите внимание, что :Ack по умолчанию переходит в списке QuickFix к первому результату. Если вам это не нравится, используйте :Ack!, или поменяйте местами функциональность двух команд в конкретном документе.
(Вас может смутить, что FZF.vim добавляет команду :Ag, интерактивно использующую FZF для поиска с помощью ag. Я для пробы привязал её к ,a. Не заметил особого толка, но типа круто.)
Когда результаты появятся в окне QuickFix, самый простой способ их использовать — переместить курсор и нажать Enter для открытия результата. Также для навигации по списку есть команды :cnext и :cprev, и я пытался найти подходящие кроссплатформенные комбинации клавиш, но не нашёл.
Затем я открыл для себя vim-unimpaired, добавляющий полезные биндинги вроде [q и ]q для :cprev и :cnext. На самом деле в vim-unimpaired гораздо больше привязок для пар «вперёд/назад» — навигация по ошибкам компилятора/линтера и включение популярных опций вроде номеров строк, которые, как я считаю, должны быть встроены в Vim.
Использовать окно QuickFix для результатов поиска так удобно, что я написал несколько биндингов для поиска по текущему слову под курсором. Как exhuberant-ctags пытается искать теги в Ruby и CoffeeScript, иногда нужно просто поискать по слову, на которое смотришь:
nmap <M-k> :Ack! "b<cword>b" <CR>
nmap <Esc>k :Ack! "b<cword>b" <CR>
nmap <M-S-k> :Ggrep! "b<cword>b" <CR>
nmap <Esc>K :Ggrep! "b<cword>b" <CR>Наконец, после поиска и навигации я обычно жму x (привязано к :cclose) для закрытия окна QuickFix. Вероятно, мне понадобится снова вернуться к файлу, который я смотрел перед началом поиска, так что обычно я повторяю Ctrl-o несколько раз, тем самым перепрыгивая обратно по списку переходов, словно жму кнопку «Назад» в браузере.
В другие разы использую; для поднятия списка из буфера и поиска там оригинального файла. Но теперь, когда я об этом задумался, возможно, изменю на O глобальную отметку (global mark) в своём биндинге Meta-k, так что ‘O будет всегда возвращать меня туда, откуда я начал.
Примечание о терминалах на macos
Сколько себя помню, вместо стандартного MacOC-терминала Terminal.app я выбирал iTerm2. И недавно заметил, что при наборе в Vim внутри iTerm2 чувствуется медлительность, особенно внутри tmux. Для сравнения я попробовал использовать urxvt внутри XQuartz, и всё работало молниеносно.
Несколько дней спустя я прочитал статью, в которой говорилось о задержке ввода между терминалами на macOS и утверждалось, что Terminal.app теперь значительно быстрее iTerm2. Я попробовал сам и обнаружил, что длительность задержки после нажатия клавиш была где-то между urxvt и iTerm2, так что я полностью перешёл на Terminal.app.
Я скучаю лишь о вертикальных сплитах в iTerm2 и о простоте применения шрифтов разных размеров в разных панелях. В iTerm2 (точнее — в любом редакторе, в котором зона редактирования не является одиночной сеткой с ячейкой фиксированного размера) это сделать проще. Но я вполне могу без этого жить.
Прочие плагины
Мне подсказали плагин vim-polyglot, в котором больше 100 синтаксических плагинов собраны в единый пакет. Он загружает их только по требованию. Все версии свежие, автор выбрал лучшие плагины, чтобы для большинства популярных языков хорошо работали отступы и подсветка.
Комментирование кода — это повседневная задача, так что имеет смысл выбрать плагин, достаточно умный для комментирования строк или блоков кода на разных языках. Вы можете взять :s/^/#, если пишете код, использующий хеши для комментирования строк, но я предпочитаю плагин vim-commentary. Он позволяет с помощью команды gc закомментировать или раскомментировать код на любом языке.
Плагин vim-surround настолько полезен, что его можно встроить в Vim. Он добавляет биндинги для добавления, удаления или изменения символов в тексте любого размера. Например, можно заменить одиночные кавычки двойными или квадратные скобки круглыми.
К сожалению, клавиша . по умолчанию не повторяет эти изменения, так что для этого вам понадобится repeat.vim. Например, для изменения кавычек в нескольких строках однократно используйте cS'” или их комбинацию, затем для повторения замены в следующей строке нажмите ..
Если пишете на Ruby или другом языке с ключевыми словами для завершения блока, то вам много раз приходится повторять end. Плагин endwise вставляет их автоматически. А если вы пишете на HTML или XML, то очень рекомендую closetag.vim, автоматически закрывающий теги после ввода </.
В исходном посте я упоминал о макросах для исправления табуляций и пробелов, чтобы можно было работать с кодовыми базами, использующими разные вариации табуляций и пробелов. Но sleuth.vim может определять эти настройки автоматически, сканируя файлы при открытии. Он работает 90 % времени и делает эти макросы бесполезными.
Работа с содержимым по модели “существительное — глагол”
Джеф Раскин, известный авторитет в области эргономики интерфейсов, в своем классическом труде “Интерфейс: новые направления в проектировании компьютерных систем” упоминает две модели работы с содержимым — “глагол — существительное”, когда сначала задается действие, а затем выбирается содержимое, к которому его нужно применить, и “существительное — глагол”, когда сначала выделяется содержимое, а затем к нему применяется какая-либо операция.
В большинстве случаев предпочтительна именно модель “существительное — глагол”. В данном случае это определенно так. Добавлю, что часть приемов, о которых пойдет речь, были изобретены мной независимо от Раскина в то время, когда я еще не знал о существовании его книги, путем проб и ошибок — я пробовал разные способы выполнения действий, и через некоторое время у меня формировалось представление о том, что удобно, а что — нет.
В данном случае содержимым, над которым выполняются операции, является редактируемый текст. Выделенным содержимым, соответственно, обычно является выделенный текст.
В Vim, однако, понятие выделенного содержимого раздваивается. В качестве него могут выступать:
Первый случай широко известен, и подробно останавливаться на нем я не буду. В визуальном режиме серым цветом выделяется блок текста, затем к нему применяется команда (допустим, “Перевести в верхний регистр”). Все, как в других редакторах.
Чужой среди своих
Так почему же вим?
Если слепой десятипальцевый метод печатания создан для эффективного набора текста, то вим создан для слепого десятипальцевого редактирования текста.
Вим предлагает другой взгляд на способ работы с текстом. Вместо горячих клавиш мышка перемещение стрелками вим вводит понятие режимы. По умолчанию, открыв редактор, мы попадаем в режим normal. В этом режиме вся клавиатура действует как приборная панель, набор текста в нём невозможен.
Его основная задача — использовать клавиатуру для перемещения по тексту и выполнение модификаций с помощью команд. В отличие от горячих клавиш, все команды короткие и нередко составные, причем, нажатие составных команд всегда последовательное, а не одновременное, как в горячих клавишах.
Другими словами, вим предоставляет язык для модификации текста.
Приведу несколько примеров:
- w — переместиться на слово вперед
- W — перемещаться вперед по пробелам
- b — переместиться назад
- B — перемещаться назад по пробелам
- dd — удалить строку
- diw — удалить слово, которое находится под курсором
- daw — удалить слово, которое находится под курсором вместе с окружением (всё, кроме пробелов, например кавычки)
- gg — переместиться в начало документа
- / — начнёт поиск; всё, что вводится далее, ищется в открытом файле (плюс есть команды для перемещения вперед и назад по найденному)
А вот, например, более интересная команда — r. После нажатия редактор ожидает следующего символа. Затем, когда он будет введен, редактор заменяет символ под курсором на введённый. Нетрудно догадаться, что r означает replace.
Сама система команд, при этом, выстраивается в логичную систему, где всё имеет смысл и находится на своем месте. Причем, не только с точки зрения обозначений (i — inner, a — around и так далее), но и с точки зрения расположения на клавиатуре. Из этого, кстати, следует интересный вывод: если ваша раскладка не qwerty, то вся клавиатура «поедет», и пользоваться вимом станет невыносимо больно.
Отдельного упоминания заслуживает перемещение по тексту. В виме все перемещения делаются набором клавиш hjkl. Вы, должно быть, удивлены что эти клавиши расположены в одну строчку. Но как показывает практика, к такой системе привыкаешь крайне быстро и потом везде пытаешься перемещаться таким же способом.
Ключевое место в этой структуре имеет клавиша под названием Leader. Это не какая-то конкретная клавиша, она разная у разных пользователей, хотя сейчас, как правило, все используют пробел. Дело в том что большая часть пользовательских комбинаций (и тех, кто предоставляют плагины), делаются как раз через лидер. В конфигурации она обозначается как <Leader>.
vim cheat sheet by Max Cantor
Но для полноценной работы одного режима normal недостаточно. Для перехода в режим редактирования insert, существует более 6 способов! Например ввод команды i приводит к тому, что ввод начинается прямо в том месте, где стоит курсор, а shift a перемещает курсор в конец строки (требуется довольно часто), в свою очередь cc стирает ту строчку, где находится курсор и входит в режим редактирования.
Для выхода из режима вставки в нормальный режим, достаточно нажать ESC.
Кроме этих двух, у vim есть режим visual, который похож на normal, но используется исключительно для выделения текста. И еще один способ взаимодействия с редактором появляется после ввода символа : в нормальном режиме.
Курсор перемещается вниз экрана, куда можно вводить различные команды. Так, например, делается выход из вим. В этой строке необходимо набрать q и нажать Enter. Команды, вводимые подобным образом, обычно обозначают так: :help.
При правильной работе в вим режим вставки используется только для ситуации набора текста (или стирания во время набора). Модификации и перемещения выполняются, в подавляющем большинстве случаев, в режиме команд.
Мощь режима normal вы можете оценить хотя бы по тому, что абсолютно в каждом популярном редакторе есть плагин, эмулирующий работу vim и, как правило, это самый популярный плагин с огромным отрывом от всех остальных. Например, плагин в VS Code установили более миллиона раз.
Другой, не менее интересный, а для многих, возможно, шокирующий пример популярности этого режима — программное обеспечение вокруг нас. Gmail поддерживает перемещение как в vim прямо в веб интерфейсе, Github тоже (попробуйте на странице любого репозитория набрать вопросительный знак на клавиатуре).
В каждом браузере существует популярный плагин, позволяющий перемещаться по загруженным страницам в стиле вим. Все пейджеры, такие как less или more, также используют навигацию, портированную из вима. Соответственно и все программы, использующие пейджеры, например, git log (и другие команды git).
Наличие режимов — ключевая, но не единственная причина. Вторая, не менее важная — буферы. В обычных редакторах есть чёткое разграничение на табы с файлами и другие панели, такие как файловое дерево, встроенный терминал, окно вывода ошибок, окно конфигурации, окно отладки и так далее.
В виме любой кусок редактора, открытый в своей собственной рамке — всего лишь текстовый буфер независимо от того, как он используется. Автоматически это означает единый способ взаимодействия с этими буферами. Например, упоминавшийся выше / поиск прекрасно работает в любой части редактора.
То же самое касается перемещения с hjkl. Содержимое такого буфера можно копировать стандартными средствами как целиком, так и по выделению, его можно закрыть через команду, предназначенную для закрытия буфера (опять же, независимо от его внутренней структуры).
Можно даже открыть больше буферов, чем места на рабочей области. Одни буферы могут спокойно перекрывать другие, что не помешает переключению между ними. Буферы настолько удобны, что несмотря на наличие табов (вкладок) в вим, пользуются ими крайне редко.
Еще одно внезапное преимущество появляется из-за текстовой природы самого редактора. Так как он открывается прямо во вкладках терминала, а продвинутые терминалы имеют такую возможность как split окна, то интеграция терминала внутрь vim особо не нужна и с помощью комбинации вкладок терминалов и вима можно очень удобно настроить рабочий процесс.

Терминал iTerm 2 со split-окнами
🤔 зачем редактировать текст без мыши?
У мыши один курсор, которым нужно целиться в мелкие объекты на экране. А пальцев на руках десять, и ими никуда целиться не надо (при должной сноровке). Если у вас выработана мышечная память и вы знаете горячие клавиши (или команды Vim), вы будете редактировать текст быстрее, чем при использовании мыши.
Посмотрите, как удаляет строку среднестатистический пользователь:
- Он отрывает одну руку от клавиатуры.
- Берётся за мышку.
- Выделяет мышкой ненужную строку.
- Нажимает свободной рукой клавишу удаления.
- Возвращает обе руки в исходное положение на клавиатуру.
А так это же действие выполнит пользователь Vim:
- Он жмёт «esc», чтобы перейти в режим команд.
- C помощью навигационных клавиш j и k находит нужную строку.
- Пишет команду dd — удаление строки.
- Жмёт i, чтобы вернуться к редактированию текста.
Пользователь Vim убирает руки с клавиатуры, только чтобы поесть или почесать репу. Всё остальное время он короткими командами обрабатывает текст в несколько раз быстрее, чем любой человек с мышью.
После привыкания работа в Vim сравнима с игрой на гитаре: вы управляете текстом, будто он продолжение вашей руки. Фильмы про хакеров видели? Вот такой эффект.
