Разное

Команды редактора vim: Основные команды текстового редактора VI / VIM

Содержание

Текстовый редактор vim — краткое руководство — Энциклопедия хостинга

Текстовый редактор vi (vim)

Vim (сокр. от Vi Improved, произносится Вим) — текстовый редактор, созданный на основе более старого Vi. Ныне это один из мощнейших текстовых редакторов с полной свободой настройки и автоматизации.

На выделенных серверах установлен vim, также создан alias который при вызове команды vi вызывает vim

В данной статье приводится практический опыт использования редактора, кратко описаны широко используемые команды для редактирования текста которые пригодятся начинающим осваивать этот редактор.

Режимы работы

Существует три основных режима работы: режим команд, режим редактирования и режим последней строки. Выход из режима редактирования осуществляется клавишей Escape (далее обозначена как (esc), переход в режим редактирования клавишами i или insert.
Находясь в режиме команд, можно выполнять сложные операции редактирования текста с помощью клавиши «двоеточие»(:). При нажатии этой клавиши курсор устанавливается в последнюю строку экрана, поэтому данный режим называется режимом последней строки. Он считается особым типом режима команд.

Для того, чтобы открыть какой-то файл или создать новый надо выполнить команду:

Затем можно нажать клавишу i (или insert) и внести нужные изменения.

если вместо i нажать a, текст будет вставляться за символом на котором стоит курсор (обычно используется при редактировании файлов этот метод), если нажать o — будет вставлена новая строка.

Стирать текст следует выйдя из режима редактирования клавишей Escape и затем можно использовать клавишу x — она работает как клавиша del — стирает вперед, если нажимать shift+x, то будет стирать назад (по аналогии с backspace)

После редактирования нажмите (esc):wq чтобы выйти с сохранением текста

Включить/выключить нумерацию строк

set number / :set nonumber

Основные команды перемещения по тексту

  • Перейти к строке с номером

(esc):номер или (esc),номер,shift+g

  • Поиск по тексту

(esc)/слово_которое_ищем

(esc) shift+j в конце строки объединит строки вместе.

(esc) shift+g — переместит в конец текста

  • Перемещение на первый символ в режиме просмотра

1g

Работа с буфером

(esc) dd — удалит строку в буфер

(esc) 10dd — удалит 10 строк в буфер

(esc) yy — скопирует строку в буфер

(esc) 10yy — скопирует 10 строк в буфер

(esc) p — вставит содержимое буфера под курсором

(esc) P — вставит содержимое буфера над курсором

Замена текста

(esc):s/что_меняем/на_что_меняем/g

g — обозначает замену до конца строки

если надо менять по всему файлу, то тогда пишем
(esc):%s/что_меняем/на_что_меняем/g

появился символ % в начале команды

  • Комментировать блок текста от курсора до строки номер 10
:.,10s/^/#/
  • Комментировать блок текста от курсора до конца
:.,$/^/#/

Как выйти из редактора vi

  • Выход осуществляется последовательностью нажатий

(esc):q

  • Выход без сохранения

(esc):q!

  • Выход с сохранением текста

(esc):wq
или
(esc):exit

  • Выход с принудительным сохранением (например, если файл read-only)

(esc):wq!

Vim (Русский) — ArchWiki

Ссылки по теме

Состояние перевода: На этой странице представлен перевод статьи Vim. Дата последней синхронизации: 29 июня 2018. Вы можете помочь синхронизировать перевод, если в английской версии произошли изменения.

Vim — консольный текстовый редактор, являющийся расширенной версией vi с дополнительными функциями, которые включают в себя: подсветку синтаксиса, полноценную систему помощи, встроенную поддержку скриптов (vimscript), визуальный режим для простоты выделения и сравнение файлов (vimdiff).

Установка

Установите один из следующих пакетов:

  • vim — с поддержкой Python 2/3, Lua, Ruby и Perl, но без поддержки GTK/X.
  • gvim — идентичен vim, но c поддержкой GTK/X.

Примечание:

  • Пакет vim собран без поддержки Xorg; отсутствует компонент +clipboard, поэтому Vim не сможет оперировать с основным и обменным буфером. Пакет gvim предоставляет доступ также и к Vim с интерфейсом командной строки, но с поддержкой +clipboard
  • Неофициальный репозиторий herecura предоставляет несколько версий Vim/gVim: vim-cli, vim-gvim-common, vim-gvim-gtk, vim-gvim-qt, vim-rt and vim-tiny.

Использование

Также вы можете запустить vimtutor (для версии с интерфейсом командной строки) или gvimtutor (для версии с графическим интерфейсом) для отображения руководства по использованию Vim.

Vim включает в себя широкую справочную систему, доступ к которой можно получить посредством :h субъект. Субъекты включают в себя команды, опции, горячие клавиши, плагины и так далее. Используйте команду :h (без какого-либо субъекта), чтобы полчуить информацию о вспомогательной системе и о том, как перемещаться между субъектами.

Настройка

Файл конфигурации Vim для конкретного пользователя расположен в домашней директории — ~/.vimrc, файлы текущего пользователя в ~/.vim/. Общий файл конфигурации — ~/.vimrc, а общие файлы находятся в /usr/share/vim/.

Примечание: Более ли менее стандартное поведение — например, подсветка синтаксиса — определяется в defaults.vim, который загружается, когда отсутствует ~/.vimrc. Добавьте let skip_defaults_vim=1 в /etc/vimrc для полного отключения загрузки defaults.vim. [1]

Буфер обмена

Такие команды Vim как :yank или :paste работают с безымянным регистром, который по умолчанию соответствует регистру "*. Если доступна +clipboard, то регистр "* отображается в PRIMARY буфер в X.

Чтобы изменить стандартный регистр на "+, используйте :set clipboard=unnamedplus. Регистр "+ соответствует CLIPBOARD буферу в X.

Для более подробной информации смотрите :help 'clipboard'.

Совет: Для копирования и вставки могут быть созданы горячие клавиши. Смотрите, например, [2] для ctrl+c, ctrl+v и ctrl+x.

Подсветка синтаксиса

Чтобы включить подсветку синтаксиса для многих языков программирования:

:filetype plugin on
:syntax on

Отступы

Отступы для определенного типа файла:

:типфайла indent on

Визуальный перенос

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

Изначально перенос строки происходит ровно в том месте, где размещается последний ее символ, поместившийся на экране, даже если он находится в середине слова. Для более умного переноса используйте опцию linebreak. Когда эта опция включена командой set linebreak, перенос строки происходит только после символов, которые перечислены в опции breakat, которая по умолчанию содержит в себе пробел и некоторые знаки препинания (смотрите :help breakat).

Остаток строки обычно начинается с начала следующей линии, без всякого отступа. Опция breakindent сообщает Vim, что необходимо отображать перенесенный остаток строки с отступом, так, что на всех последующих линиях перенесенные части строки имеют тот же отступ, что и начало этой строки. Поведение breakindent может быть настроено при помощи опции breakindentopt. Например, для файлов исходного кода на языке Python может быть полезно добавлять дополнительный отступ в 4 пробела для перенесенных частей длинной строки (подробнее смотрите в :help breakindentopt):

autocmd FileType python set breakindentopt=shift:4

Использование мыши

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

Чтобы включить поддержку мыши, добавьте в ~/.vimrc:

set mouse=a

Опция mouse=a устанавливается в defaults.vim

Примечание: Копирование/вставка будут использовать регистр "*, если есть доступ к X серверу; смотрите раздел #Буфер обмена. xterm по-прежнему может обрабатывать нажатия мыши, когда зажат shift.

Переход на новую строку с помощью клавиш со стрелками

По умолчанию, при нажатии в начале строки или в конце, курсор не переводится на следующую/предыдущую строку.

Это можно исправить с помощью добавления строки set whichwrap=b,s,<,>,[,] в ваш файл ~/.vimrc.

Объединение файлов

Vim включает в себя diff-редактор (программа, которая отображает различия между двумя файлами и позволяет удобно их объединять). Используйте vimdiff для этого — просто укажите ей пару файлов: vimdiff файл1 файл2. Ниже приведен список команд vimdiff.

ДействиеГорячая клавиша
следующие изменение]c
предыдущее изменение[c
diff obtaindo
diff putdp
развернуть блокzo
свернуть блокzc
перечитать файлы:diffupdate
переключить окнаCtrl+w+w

Советы и рекомендации

Нумерация строк

Чтобы включить отображение номера столбца, используйте :set number. По умолчанию показываются абсолютные значения номеров строк, относительные включаются посредством :set relativenumber.

Переход к новой строке осуществляется посредством :line number или line numbergg. Все переходы запоминаются в лист переходов, для более подробной информации смотрите :h jump-motions.

Проверка орфографии

Проверку орфографии в Vim можно включить с помощью:

set spell

По умолчанию установлен только английский словарь. Другие словари можно найти в официальных репозиториях по запросу vim-spell. Еще больше словарей можно найти в FTP-архиве Vim. Словари необходимо поместить в каталог для словарей — ~/.vim/spell/. Включить словарь можно командой :setlocal spell spelllang=ru_yo (заменив ru_yo на имя нужного словаря).

ДействиеКоманда
следующая ошибка]s
предыдущая ошибка[s
предложения для исправленияz=
добавить правильное написаниеzg
добавить правильное написание (на сеанс)zG
добавить неправильное написаниеzw
добавить неправильное написание (на сеанс)zW
повторить проверку орфографии во всем файле:spellr

Совет:

  • Чтобы включить проверку сразу для двух языков (например, английского и русского), добавьте set spelllang=en,ru в ~/.vimrc или /etc/vimrc и перезапустите Vim.
  • Вы можете включить проверку орфографии для конкретных типов файлов (например .txt), используя плагин FileType и собственное правило для определения типа файла. Чтобы включить проверку орфографии для всех файлов, оканчивающихся на .txt, создайте файл /usr/share/vim/vimfiles/ftdetect/plaintext.vim и вставьте туда строку: autocmd BufRead,BufNewFile *.txt setfiletype plaintext. Далее, вставьте строку autocmd FileType plaintext setlocal spell spelllang=ru в файл ~/.vimrc или /etc/vimrc и перезапустите Vim. Или поместите строку autocmd BufRead,BufNewFile *.txt setlocal spell в ~/.vimrc или /etc/vimrc и перезапустите Vim. Не забудьте отредактировать строчку (specifically *.txt), чтобы включить соответствующие типы файлов для проверки орфографии.
  • Чтобы включить проверку орфографии только для документов LaTeX (или TeX), добавьте autocmd FileType tex setlocal spell spelllang=ru в файл ~/.vimrc или /etc/vimrc и перезапустите Vim.

Сохранение позиции курсора

Если вы хотите, чтобы курсор возвращался в прежнее положение после открытия файла, добавьте следующее в ~/.vimrc:

augroup resCur
  autocmd!
  autocmd BufReadPost * call setpos(".", getpos("'\""))
augroup END

Запуск Vim по команде vi

Создайте псевдоним для vi на vim.

Если вы хотите, чтобы при вводе sudo vi запускался vim, то установите пакет vi-vim-symlinkAUR, который удалит vi и заменить его символической ссылкой на vim.

Возврат каретки DOS/Windows

Если вы видите последовательность ^M в конце каждой линии, это означает, что вы редактируете текстовый файл, который был создан в MS-DOS или Windows. Дело в том, что в Linux для переноса принято использовать один символ новой строки (LR), тогда как в системах Windows/MS DOS для той же цели используется последовательность из двух символов: возврата каретки (CR) и новой строки (LR). Как раз эти символы возврата каретки и отображаются в виде ^M.

Для удаления всех символов возврата каретки из файла, выполните:

:%s/^M//g

Обратите внимание, что ^ здесь — управляющий символ, а не обычный. Чтобы ввести управляющую последовательность ^M, нажмите Ctrl+v,Ctrl+m.

Также вы можете просто установить пакет dos2unix и исправлять файлы командой dos2unix файл.

Примечание: Другой простой способ заключается в изменении опции fileformat. Используйте set ff=unix для преобразования файлов с окончанием строки DOS/Windows в файлы с окончанием строки Unix. Для того, чтобы сделать обратное, просто используйте set ff=dos.

Пустое пространство в нижней части окон gVim

Когда используется оконный менеджер, настроенный на игнорирование размеров окна, gVim заполняет неиспользованные области окна стандартным фоновым цветом темы GTK.

Решение заключается в регулировании количества места, которое будет резервировать в нижней части окна gVim. Поместите следующую строку в ~/.vimrc:

set guiheadroom=0

Примечание: Установив значение 0, вы не сможете видеть горизонтальную полосу прокрутки внизу окна.

Плагины

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

Совет: For a list of popular plugins, see Vim Awesome)

Установка

Используя встроенную систему управления пакетами

В Vim 8 добавлена возможность загрузки сторонних плагинов. Чтобы использовать эту функциональность, переместите плагины в ~/.vim/pack/foo.

Используя менеджер плагинов

Менеджер плагинов позволяет устанавливать плагины и управлять ими одинаковым образом независимо от того, на какой системе вы запускаете Vim. Он представляет собой специальный плагин, который выполняет роль пакетного менеджера для других плагинов.

  • Vundle — в настоящее время наиболее популярный менеджер плагинов Vim.
  • Vim-plug — минималистичный менеджер плагинов для Vim, который имеет много особенностей, например, загрузка плагинов по запросу и параллельное обновление.
  • pathogen.vim — простой плагин для управления переменной runtimepath.
  • Dein.vim — менеджер плагинов, заменяющий NeoBundle, доступен как vim-dein-gitAUR.
Из репозиториев Arch

Группа vim-plugins объединяет множество разнообразных плагинов. Используйте команду pacman -Sg vim-plugins для отображения списка пакетов, которые вы можете затем установить, используя pacman.

cscope

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

Установите пакет cscope.

Скопируйте стандартный файл cscope, который Vim будет автоматически читать:

mkdir -p ~/.vim/plugin
wget -P ~/.vim/plugin http://cscope.sourceforge.net/cscope_maps.vim

Примечание: Вам наверное понадобится откомментировать следующие строки в ~/.vim/plugin/cscope_maps.vim, чтобы включить горячие клавиши cscope в Vim 7.x:

set timeoutlen=4000
set ttimeout

Создайте файл, который содержит список файлов для индексации (cscope может обрабатывать множество языков, но для примера мы возьмем файлы на Си/Си++ с расширениями .c, .cpp и .h):

cd /путь/к/каталогу/проекта
find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files

Создание файлы базы данных, которые cscope будет читать:

cscope -bq

Примечание: cscope ищет файл cscope.out в рабочем каталоге, поэтому тот же каталог следует использовать и для навигации по проекту в Vim. Также, вы можете указать путь до этого файла явно, установив его в переменной окружения $CSCOPE_DB.

Горячие клавиши по умолчанию:

 Ctrl-\ и
      c: найти функции вызывающие эту функцию
      d: найти функции вызываемые этой функцией
      e: найти egrep паттерн
      f: найти этот файл
      g: найти это определение
      i: найти файлы, включающие этот файл (#include)
      s: найти этот символ Си
      t: найти присвоения

Не стесняйтесь изменять горячие клавиши:

#Maps ctrl-c to find functions calling the function
nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>

Taglist

Taglist отображает структуру файлов исходного кода и позволяет эффективно просматривать исходники на различных языках программирования.

Установите пакет vim-taglistAUR.

Полезные опции можно записать в ~/.vimrc:

let Tlist_Compact_Format = 1
let Tlist_GainFocus_On_ToggleOpen = 1
let Tlist_Close_On_Select = 1
nnoremap <C-l> :TlistToggle<CR>

Смотрите также

Официальные ресурсы

Руководства

Видео
Игры

Конфигурация

Цвета

основные команды, изучаем vim в linux

Установка редактора vim:

sudo apt-get install vim 

Vim (сокр. от Vi Improved, произносится «вим») — свободный режимный текстовый редактор, созданный на основе более старого vi.

Одна из главных особенностей редактора — применение двух основных, вручную переключаемых, режимов ввода: командного (после запуска редактор находится в нём) и текстового (режим непосредственного редактирования текста, аналогичный большинству «обычных» редакторов). Vim не интуитивен, так что эффективная работа с редактором требует предварительного обучения.

Основные комбинации командного режима vim

i - перейти в режим редактирования 
 
yy - копирование текущей строки в буфер 

v - выделение текста, используется для копирования участков текста 
 
y - копировать выделенный текст 
 
d - удалить выделенный текст 

dd - удалить одну строку - на которой курсор

d 4 d - удалить 4 строки

р - вставка из буфера под курсором 
 
P - вставка из буфера перед курсором 

u - назад - отменить последнее действие (аля ctrl+z)

:w - сохранить изменения 

:x - сохранить все изменения и выйти 
 
:q! - выйти без сохранения изменений 
  

Командами vim, которые чуть выше, я пользовался пол года, начинаю я того момента, как познакомился с вим. Мне было их достаточно.

Поиск и замена в vim

:%s/{что искать}/{на что менять}/[flags]

: — Вход в командный режим;
s — Сокращенная форма команды :substitute;
% — Выполнить эту команду на всех строках (% — синоним «от первой до последней строки»).

Например, заменить в файле все слова ‘test’ на ‘adminer’:

:%s/test/adminer/

Ещё полезные команды:

hjkl - перемещение курсора 
:123 - перейти к строке 123
/text - поиск текста text
n/N - переместит курсор к следующему/предыдущему вхождению строки

Поменять строки местами в vim

ddp
Почему ddp? Это комбинация сразу двух команд:

  • dd — вырезать строку
  • p — вставить

Дата добавления:
8 лет назад

Просмотров: 411

Зачем использовать vim – Hexlet Guides

Содержание
  1. Различия редакторов
  2. Чужой среди своих
  3. Цена
  4. Когда не стоит учить вим
  5. Сколько понадобится времени
  6. NeoVim
  7. Процесс обучения
  8. Полезные ссылки
  9. Плагины
  10. Советы
  11. Дополнительные ссылки

VI(M) — текстовый редактор, который появился в далеком 1991 году, но до сих пор пользуется огромной популярностью (наряду с Emacs). Как правило, на него переходят после других редакторов уже состоявшиеся разработчики. Нередко, переходят с полноценных IDE. Почему?

vim с настроенным линтером, файловым деревом NERDTree и нечетким поиском с fzf

В этом гайде не будет пошагового обучения виму. Цель — объяснить философию vim и причины его популярности, а также дать направление для дальнейшего обучения.

Различия редакторов

В современном мире есть из чего выбрать среди редакторов: Sublime Text, Atom, VS Code, Brackets. И это не считая IDE.

Visual Studio Code

Все они не лишены недостатков, но с точки зрения возможностей наворочены по максимуму. Между собой редакторы сравнивают по следующим характеристикам:

  • Скорость работы. Хотя её ставят превыше всего, практика показывает, что программисты готовы страдать ради продвинутых возможностей.
  • Возможности по редактированию текста, например мультикурсоры или сплиты (разделения экрана).
  • Наличие большого числа разнообразных плагинов, включающих поддержку языков и инструментов.
  • Интеграции, такие как git, терминалы и другое.

При таком способе сравнения vim выглядит достаточно бледно на фоне других редакторов. Да, он самый быстрый, но количество и качество плагинов явно уступает, а интеграций и вовсе нет, хотя, с другой стороны, многие из них не нужны в мире вима. Кроме всего прочего, обычный vim (а есть еще gvim — версия, запускающаяся в виде отдельного оконного приложения) — терминальная программа со всеми вытекающими последствиями. Мышка хоть и поддерживается, но работать используя её в виме — сомнительное удовольствие. Например скроллинг двигается рывками, так как в текстовом терминале смещение построчное.

И завершает картину кривая обучения. У вима она даже круче, чем у emacs. Чтобы научиться им пользоваться, придется в буквальном смысле страдать (но недолго если правильно учиться).

Чужой среди своих

Так почему же вим?

Если слепой десятипальцевый метод печатания создан для эффективного набора текста, то вим создан для слепого десятипальцевого редактирования текста.

Вим предлагает другой взгляд на способ работы с текстом. Вместо горячих клавиш + мышка + перемещение стрелками вим вводит понятие режимы. По умолчанию, открыв редактор, мы попадаем в режим normal. В этом режиме вся клавиатура действует как приборная панель, набор текста в нём невозможен. Его основная задача — использовать клавиатуру для перемещения по тексту и выполнение модификаций с помощью команд. В отличие от горячих клавиш, все команды короткие и нередко составные, причем, нажатие составных команд всегда последовательное, а не одновременное, как в горячих клавишах.

Другими словами, вим предоставляет язык для модификации текста.

Приведу несколько примеров:

  • w — переместиться на слово вперед
  • W — перемещаться вперед по пробелам
  • b — переместиться назад
  • B — перемещаться назад по пробелам
  • dd — удалить строку
  • diw — удалить слово, которое находится под курсором
  • daw — удалить слово, которое находится под курсором вместе с окружением (всё, кроме пробелов, например кавычки)
  • gg — переместиться в начало документа
  • / — начнёт поиск; всё, что вводится далее, ищется в открытом файле (плюс есть команды для перемещения вперед и назад по найденному)

А вот, например, более интересная команда — r. После нажатия редактор ожидает следующего символа. Затем, когда он будет введен, редактор заменяет символ под курсором на введённый. Нетрудно догадаться, что r означает replace. Подобных команд в виме не одна сотня. И многие из них могут комбинироваться в довольно сложные цепочки, позволяя творить чудеса.

Сама система команд, при этом, выстраивается в логичную систему, где всё имеет смысл и находится на своем месте. Причем, не только с точки зрения обозначений (i — inner, a — around и так далее), но и с точки зрения расположения на клавиатуре. Из этого, кстати, следует интересный вывод: если ваша раскладка не qwerty, то вся клавиатура «поедет», и пользоваться вимом станет невыносимо больно.

Отдельного упоминания заслуживает перемещение по тексту. В виме все перемещения делаются набором клавиш hjkl. Вы, должно быть, удивлены что эти клавиши расположены в одну строчку. Но как показывает практика, к такой системе привыкаешь крайне быстро и потом везде пытаешься перемещаться таким же способом.

Ключевое место в этой структуре имеет клавиша под названием Leader. Это не какая-то конкретная клавиша, она разная у разных пользователей, хотя сейчас, как правило, все используют пробел. Дело в том что большая часть пользовательских комбинаций (и тех кто предоставляют плагины), делаются как раз через лидер. В конфигурации она обозначается как <Leader>.

vim cheat s

Минимум один трюк Vim, про который вы не знали / Хабр

Я уже восемь лет работаю в Vim и постоянно открываю что-то новое. Принято считать это достоинством Vim. Как по мне, так это недостаток открытости: куча скрытых функций спрятаны слишком глубоко.

Вот говорят о красоте модального редактирования и текстовых объектах, но мне кажется, что суть Vim не в этом. Vim — это лоскутное одеяло из подсистем, под завязку забитых дополнительными инструментами. Только в обычном режиме редактирования более сотни комбинаций клавиш! Такая плотность инструментария в значительной степени объясняет, почему Vim настолько полезен. Если «показать все теги для ключевого слова» — это просто g], то этой командой будут пользоваться гораздо чаще.

В системах с недостатком открытости приходится полагаться на руководства. Но для Vim их не так уж много. Есть статьи для новичков, такие как ciw (не путать с CIA, мануалом ЦРУ по Vim) и тому подобное. И есть статьи экспертов, которые погружаются в подсистемы. Но никто на самом деле не говорит об этих особых трюках, которые заставляют воскликнуть: чёрт побери, как мне это было нужно в течение последних шести лет!


Эта статья о некоторых маленьких трюках, которые я использую в Vim. Ни один из них не разобран во всех деталях, так что если что-то заинтересовало, рекомендую покопать дополнительную информацию. Они также не связаны друг с другом. Но это нормально. В общем, их более чем достаточно, чтобы реально помочь практически каждому.

Очень грубо, пользователи Vim делятся на две категории. Пуристы ценят небольшие размеры и вездесущность. Как правило, они сводят конфигурацию к минимуму на случай, если придётся работать на незнакомом компьютере (например, по ssh). С другой стороны, расширяльщики наполняют Vim плагинами, функциями и доморощенными сопоставлениями в тщетной попытке притвориться, что они используют Emacs. Если забрать у них vimrc, то ребята останутся совершенно беспомощными.

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

Для модальных команд используются стандартные представления из справки, т. е. <cr> означает нажатие клавиши Enter. Когда нужно получить справку :h для определённой строки, например, :h E676, то строка будет в скобках.

Различные команды в обычном режиме

«: и @:

": является регистром, хранящим последнюю выполненную команду. Вы можете набрать ":p, чтобы распечатать его в буфер. @:повторяет последнюю команду.

«=

Регистр для «выражений». Здесь вы можете ввести любое выражение vimL и вставить его, использовать с ctrl-R и т. д. Таким образом, например, локальная метка времени вставляется вводом "=strftime("%c")<cr>p.

mA, ‘A

m{letter} устанавливает метку на месте курсора. Тогда '{letter} перейдёт к этой строке. Для строчных букв действует в пределах на буфера, поэтому подходит для навигации. Для прописных букв действует глобально: даже если вы находитесь в другом файле, 'A перейдёт к файлу с меткой А. Можете посмотреть все свои метки командой :marks:.

ctrl-A и ctrl-X

Увеличивает и уменьшает следующее число в строке на месте курсора или справа от него. Поскольку сразу переходит к числу, то сочетание можно использовать из любого места. 10c-A намного проще, чем wwwwwciw20.

q:

Открывает историю предыдущих команд. Можете работать с ней как с любым текстом Vim, но изменения не сохраняются. Однако вы можете запустить изменённую команду с помощью <CR>. Это позволяет очень быстро изменять и перезапускать команды или искать старые для повторного использования.

q/, q?

То же, что и q:, за исключением поиска.

ctrl-I, ctrl-O

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

Макросы

См. этот пост для глубокого погружения в использование макросов.

Визуальный режим

gv

Выбирает предыдущий визуальный элемент.

v_o

Переходит на другую сторону визуального блока. Полезно, если вы начали одну строку слишком низко или что-нибудь такое. В блочном режиме переходит в противоположный угол по диагонали, а для перехода в противоположный угол по горизонтали используйте v_O.

g ctrl-A / ctrl-X

В визуальном режиме ctrl-A просто увеличивает первое число на каждой строке. С другой стороны, g ctrl-A будет с каждой строкой наращивать увеличение на единицу. Это намного проще объяснить в таблице:

Операторы: v, V, c-v (:h o_v)

Вероятно, вы знаете, что в визуальном режиме можно выделять символы (v), строки (V) и блоки (ctrl-V). Но эти три сочетания можно использовать в качестве операторов движения по соответствующему фрагменту. Например, у вас есть такой текст:

abc

abc

abc

Если поместить курсор на верхнюю b и нажать d2j, он удалит все три строки, потому что j двигается построчно. Если вместо этого нажать d<c-V>2j, движение становится поблочным и удаляется только средний столбец с тремя буквами b.

Один вариантов использования — удаление в поиске. Обычный d/ перемещается посимвольно. Поэтому я использую dV/ для построчного движения с удалением. Есть и другой способ сделать это:

/regex/{n}

Движение на n строк ниже совпадения или на столько же строк вверх, если значение отрицательно. В качестве побочного эффекта движение происходит построчно. Таким образом, если вы хотите удалить первую строку, соответствующую regex, можете ввести d/regex//0.

Ex-команды

Ex-команды вы вводите в командном режиме, например, команда :s. Кроме замены, есть много других полезных команд. Для всех этих примеров требуется диапазон, такой как %.

:g/regex/ex

Выполняет команду только в строках, соответствующих регулярному выражению. Например, вы можете ввести g/regex/d для удаления всех строк, соответствующих regex. Команда v похожа на g, но работает на всех строках, которые не соответствуют регулярному выражению.

Трюки становятся более мощными с применением norm и некоторых других.

:norm {Vim}

Действует так, словно вы запустили {Vim} на каждой строке диапазона. Например, g/regex/norm f dw удалит первое слово после первого пробела в каждой строке, соответствующей регулярному выражению regex. Это часто намного проще, чем макрос.

norm подчиняется всем вашим сопоставлениям. Например, если вы назначили клавиши jk на <esc> в режиме вставки, то norm I jk$diw добавит пробел к началу строки, покинет режим вставки, а затем удалит последнее слово в строке. Мне очень нравится эта функциональность, но если вы предпочитаете не использовать свои сопоставления, вы можете тогда применять norm!.

:co .

Копирует диапазон в текущую строку. Можно указывать и произвольные значения вместо точки, например, +3 или 'a. mv для перемещения.

:y {reg}

Копирует диапазон в регистр {reg}. Если {reg} обозначить заглавной буквой, то он добавляется к существующему регистру. т. е. такая команда

let @a = '' | %g/regex/y A

скопирует в a все строки, соответствующие regex во всём файле. Это помогает извлечь из файла разбитый текст и скопировать его в системный буфер обмена (с помощью let @+ = @a).

:windo {ех}

Запускает команду во всех окнах. Например, :windo $ прокрутит все окна вниз. Есть ещё bufdo, cdo, tabdo и другие.

Очень хорошо работает с g и s. Чтобы заменить все сочетания AA на BB с предварительным просмотром замен, можно ввести vimgrep AA, загрузив все совпадения в quickfix, а затем cdo s/AA/BB/cge для поиска/замены всех совпадений.

Vim для расширятелей

Здесь перечислены трюки, которые требуют сохранения в настройках или изменения сеанса Vim. Гипотетически их можно использовать в «пуританском» режиме, просто введя команды, но некоторые влекут довольно серьёзные изменения, противоречащие духу пуризма.

Здесь только самое необычное. Многие люди назначают H на крышечку ^, поэтому такие вещи не стоит упоминать. Также нет смысла говорить о vim-sensible или vim-surround, а лишь о более экзотических плагинах.

Если вы постоянно настраиваете свой vimrc, сделайте себе приятно и добавьте для этого отдельную команду:

command! Vimrc :vs $MYVIMRC

Настройки

У меня все настройки, привязки клавиш и функции хранятся в одном файле vimrc. Разбиение на множество файлов затрудняет поиск.

Большинство настроек на самом деле не являются какими-то «трюками». Лучше всего посмотреть на vim-sensible: почти все настройки оттуда подойдут вашему vimrc.

set lazyredraw

Не перерисовывать экран посреди макроса (для повышения производительности).

set smartcase/ignorecase

С двумя этими настройками поиск без заглавных букв становится нечувствителен к регистру, а поиск с заглавными буквами чувствителен к регистру.

set undofile

Сохранение действий, даже если вы закрываете и открываете Vim, так что всегда доступна отмена действий. Очень удобно в сочетании с плагином undotree.

set foldcolumn={n}

Боковая колонка со свёрнутыми блоками. Чем больше n, тем больше свёрнутых блоков показано в колонке, а для остальных указано число.

set suffixesadd={str}

gf обычно означает «перейти к файлу под курсором», но требует наличия расширения файла в строке. suffixesadd добавляет указанное расширение. Если установить suffixesadd=.md, то команда gf на строке ‘foo’ будет искать файлы foo и foo.md.

set inccommand=nosplit

Только для Neovim. Настройка incommand показывает в реальном времени, какие изменения внесёт команда. Сейчас поддерживается только s, но даже это невероятно полезно. Если ввести :s/regex, выделятся все соответствия. Если затем добавить /change, он покажет все замены. Работает со всеми свойствами регулярного выражения, включая обратные ссылки и группы.

set statusline (:h statusline)

Определяет, что отображать на панели в нижней части каждого окна. Здесь форматирование намного сложнее и привередливее, чем в других настройках, так что придётся потратить время на объяснение. Есть некоторые простые трюки. Во-первых, посмотрим на строку состояния Vim по умолчанию:

:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P

Тут проще всего заменить %P (процент файла над курсором). Формат строки состояния — значение после знака процента в фигурных скобках. Поэтому для файлов Markdown можно написать такое:

:set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %{wordcount()[\"words\"]}

И заменить процент файла на количество слов в документе.

Или установить tabline. Если вы не используете вкладки, то эту строку можно сделать «глобальной статусной строкой». Например,

set tabline=%{strftime('%c')}

всегда будет показывать дату сверху.

Привязки клавиш

У меня много привязок.

Очень много удобных клавиш в Vim по умолчанию назначено бестолково. Например, сохранение нажатия s — это синоним cl (экономия одного нажатия), а U — то же самое, что и u, за исключением записи undo как нового изменения, что функционально бесполезно. Q идентично gQ и в любом случае является колоссальной ловушкой. Z используется только для ZZ и ZQ. Чёрт возьми, даже руководство Vim рекомендует переназначать клавиши _ и , на какие-нибудь функции, поскольку, «вероятно, вы, никогда их не используете». Я бы предпочёл не экономить одно нажатие, а добавить на клавиатуру совершенно новые функции. Вот некоторые из моих привязок:

nnoremap Q @@

Не замедляясь на переход в ex-режим, повторяет последний макрос.

nnoremap s «_d

Заставляет клавишу s (с соответствующими назначениями для ss и S) работать как d, только без сохранения удалённого текста в регистре. Полезно для того, чтобы не засорять регистр.

nnoremap <c-j> <c-w>j

Перейти к окну ниже. Соответствующие назначения для h, k, l. Работа с окнами становится гораздо проще.

nnoremap <leader>e :exe getline(line(‘.’))<cr>

Выполнить текущую строку, как будто она представляет собой команду. При экспериментах часто более удобно, чем q:.

Специальные аргументы (:h map-arguments)

Команда map <buffer> lhs rhs активирует назначение клавиш только для данного буфера. Это действительно удобно работает с автокомандами как временное сочетание клавиш или при определении назначений через функцию. Буферные назначения имеют приоритет над глобальными, то есть вы можете переопределить общую команду более полезной в конкретной ситуации.

Команда map <expr> {lhs} {expr} проверяет {expr} и использует возвращаемое значение в качестве финального переназначения клавиш. Один простой вариант использования — привязка в зависимости от условий. У меня есть такие:

nnoremap <expr> k (v:count == 0 ? 'gk' : 'k')

nnoremap <expr> j (v:count == 0 ? 'gj' : 'j')

Что заставляет j и k двигаться по строке до тех пор, пока не встретится число, а после этого назначение клавиши отменяется. Поэтому я могу перемещаться по длинным абзацам прозы, не нарушая такие сочетания, как 10j.

Аргумент <silent> помогает, если какие-то привязки запускают ex-команды.

inoremaps

Благодаря inoremap привязки работают в режиме вставки. Там они начинают работать, поэтому inoremap ;a aaaa введёт ‘aaaa’ вместо ‘;a’. Если вы хотите сделать что-то в обычном режиме, используйте <c-O>. Например, если у нас есть

inoremap ;1 <c-o>ma

то ;1 установит в данной точке метку 'a.

Я люблю указывать использовать точки с запятой в качестве ключа для переназначений, потому что в нормальных текстах после точки с запятой практически всегда идёт пробел или новая строка.

autocmd

Автокоманды отлично подходят для конфигурации. Обычно вы их настраиваете в таком виде:

augroup {name}
  autocmd! " Prevents duplicate autocommands
  au {events} {file regex} {command}
augroup END

Затем, если в файле {file regex} происходит какое-либо из событий {events}, то срабатывает команда {command}. События перечислены в списке :h event. Например, если записать

augroup every
  autocmd!
  au InsertEnter * set norelativenumber
  au InsertLeave * set relativenumber
augroup END

то Vim отключит relativenumber только для режима вставки.

Команда au {event} <buffer> {ex} применяет автокоманду только к текущему буферу. Иногда я использую это для добавления краткосрочных обработчиков событий в конкретный файл.

BufNewFile, BufRead

BufnewFile запускается при создании нового файла, BufRead — при первом открытии буфера. Их обычно используют для добавления параметров и переназначений в конкретные типы файлов. У меня есть одно такое:

augroup md
  autocmd!
  au BufNewFile,BufRead *.md syntax keyword todo TODO
  au BufNewFile,BufRead *.md inoremap <buffer> ;` ```<cr><cr>```<Up><Up>
augroup END

Только в файлах Markdown подсвечивается строка TODO, а символы ;` в режиме вставки добавляет обозначение кода.

Автокоманды позволяют делать гораздо более сложные вещи. Например, au для BufWriteCmd переопределяет стандартное сохранение, позволяя реализовать нестандартную логику. Это выходит за рамки «трюков» и переходит в область «тёмной магии».

Плагины

Большинство знает о популярных плагинах, таких как vim-surround и NERDtree. Вот список некоторых малоизвестных, которые я считаю очень полезными.

Undotree


В большинстве текстовых редакторов отмена действий происходит линейно. Если вы внесёте изменение A, отмените его, а затем внесёте изменение B, то A потеряно навсегда. Однако Vim хранит всё дерево отменённых действий. Команда u откатывает действие в текущей ветке дерева, а g переходит к предыдущей хронологической версии. Можете просмотреть список отменённых действий командой :undolist.

Но этот формат не очень наглядный. Гораздо лучше увидеть фактическое дерево. Именно это делает Undotree: выкладывает хорошую ASCII-репрезентацию дерева отменённых действий с удобной навигацией.

vim.swap


Плагин предоставляет команды для обмена аргументами, поэтому вы можете в пару нажатий клавиш заменить (a, f(b, c)) на (f(b, c), a). Мне регулярно приходится делать такие правки, так что это сильное улучшение качества жизни.

Neoterm


Подключает API более высокого уровня к встроенному терминалу neo/vim. Например, :T {text} отправляет {text} в консоль. Хорошо подходит для создания интерактивной среды.

» TODO {{{

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

Окна Preview, Quickfix и List

Я иногда использую инструменты с этими окнами, но не знаю, как ими манипулировать. Хотелось бы добавить ошибки quickfix в мой плагин TLA+. Ещё мне нравится идея поместить вспомогательную информацию и команды обратного вызова в окно предварительного просмотра. Это открывает некоторые возможности, которые трудно воспроизвести в IDE.

Neovim API

Neovim предлагает продвинутый API для интеграции Vim с внешними программами. Ваш скрипт Python может отправлять команд инстансу Neovim, а вы можете управлять редактором через сервер, например. Я видел некоторые классные концептуальные демонстрации, где автозаполнение происходит на основе информации в браузере. Кажется, это очень классно!

Текстовые объекты

Никогда таких не создавал.


Итак, это был краткий обзор некоторых неявных функций Vim. Надеюсь, вы узнали что-то полезное!

Использование Vim для редактирования простого текста / Хабр

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

Конкретно для меня стимулом явилась возникшая сложность при работе с переводами. Проблема заключалась в следующем: несмотря на разрешение экрана в 1920х1200 сделать так, чтобы оба текста располагались перед глазами, было практически невозможно. Да и дергаться мышью туда-сюда, управляясь с полосами прокрутки, запоминая положения текстовых фрагментов, довольно таки неудобно. Консольный текстовый редактор, управление которым осуществляется клавиатурой, представлялся для меня логичным решением. Оставалось только разобраться в нем и из огромного массива информации выбрать только то, что нужно.

Забегая вперед, скажу, что информацию пришлось собирать фактически по крупицам. Основное направление в использовании Vim в качестве редактора «для программистов» привело к тому, что вопросам обработки «простого» текста уделяется мало внимания. В конце-концов, с поставленной задачей, как мне кажется, удалось справиться.

Первоначальные сведения о работе редактора.

Про командный режим, режим вставки, навигации по тексту и т.п., написано более чем достаточно. Однако все это можно свести к одной команде — vimtutuor. Это, как понятно из названия, обучалка базовым принципам Vim. Если вашим дистрибутивом является Ubuntu, то сперва необходимо установить полную версию редактора:

sudo apt-get install vim-full

Единственным значимым, на мой взгляд, аспектом, который не охватывает туториал — является работа в визуальном режиме. Но здесь все просто: В командном режиме нажимаем клавишу «v», выделяем необходимый кусок текста, после чего выполняем с ним необходимую операцию: будь то форматирование, удаление или копирование.

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

Это хорошо для редактирования исходного кода, но совершенно неприемлемо для написания текста. Решения здесь два. Использовать команду

:set wrap

Это заставит редактор переходить на другую строку при достижении края окна терминала, но при переходе не будет установлен символ конца строки. Таким образом, все, что мы наберем до нажатия Enter, будет являться одной длинной строкой. Это не очень удобно, поскольку навигация по строкам является довольно важным аспектом редактирования. Решением в данной ситуации будет использовании команды

:set tw=80

Она установит длину строки в 80 символов, что, на мой взгляд, является оптимальным.

При достижении указанного значения, редактор перейдет на другую строку, поставив символ окончания строки.

Форматирование текста

Следующим вопросом, на который необходимо было найти ответ — как осуществлять форматирование текста. Для этого пригодятся следующие команды:

:ce - выравнивает строку по центру

:ri - выравнивает строку по правому краю

:le - выравнивает строку по левому краю

Но как выровнять текст, что называется, «по параграфам»? Чтобы левый и правый край были ровными. Помощь Vim говорит, что для этого нужно использовать внешнюю программу. Но есть и другое решение. Подключаем макрос (идет в стандартной поставке):

:source $VIMRUNTIME/macros/justify.vim

После этого командой «_j» в режиме редактирования можно выровнять выделенный текст «по параграфам».

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

Проверка орфографии.

Неотъемлемой функцией текстового редактора для меня является проверка орфографии. В Vim этот вопрос решается так:
Качаем архивы со словарями. Разархивируем их в папку /tmp/dict (без подкаталогов внутри).
Создаем папку
mkdir -p ~/.vim/spell/
Далее формируем словарь в Vim-формате командой:
:mkspell! ~/.vim/spell/ru /tmp/dict/ru_RU — для русского языка
:mkspell! ~/.vim/spell/en /tmp/dict/en_US — для английского

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

:setlocal spell spelllang=ru_ru,en_us

Работа с несколькими документами.

Для открытия нового окна используем команды:

:new — создает новый документ в новом окне

Если же требуется открыть уже имеющийся документ, лучший способ, на мой взгляд — это ввести в командном режиме

:Sex

Откроется подобие файлового менеджера, в котором можно выбрать требуемый для редактирования файл. Перемещение из окна в окно осуществляется следующим образом: Наживаем CTRL-w, а затем стрелкой курсора переходим к нужному окну. Вместо курсора можно воспользоваться навигационными клавишами — h,j,k,l

После того, как все требуемые документы открыты в одном окне, необходимо расставить их по местам, выбрав требуемый размер. Это делается так:

CTRL-w, а затем навигационная клавиша, только с зажатым шифтом -H,J,K,L соответственно.

Разложив окна, можно подогнать их размер под конкретные нужды можно так:

CTRL-W +

CTRL-W —

изменяют размер окна по вертикали;

CTRL-W <

CTRL-W >

изменяет размер окна по горизонтали.

В качестве резюме.

Если изложенное выше оказалось для вас полезным, а Vim оказался пригодным для написания и редактирования текстов, самое время перейти к составлению своего конфигурационного файла. Для этого Открываем в своем домашнем каталоге файл vimrc — и вписываем туда команды, которые сочли полезными для каждодневного использования. У меня это ширина текста, проверка орфографии и использование макросадля выравнивания текста «по параграфам».

Кроме того, в случае если используется юникод, настоятельно рекомендую ознакомиться с материалами на ru.wikibooks.org/wiki/Vim и прописать в конфигурационный файл переназначение символов. Потому как постоянное переключение русской-английской раскладки в командном режиме реально утомляет.

p.s. Сперва я хотел разместить этот топик в блоге, посвященному Vim. Нопотом решил, что его читатели уже знакомы с текстовым редактором и столь начальная информация будет не интересна. А вот для новичков в мире *nix, слышавших про «войны» текстовых редакторов, материал будет познавательным и позволит более быстро начать использовать редактор для повседневных нужд.

Делаем из Vim-а конфетку / Хабр

Вы под давлением коллег или сокурсников из более успевающих групп решились на отчаянный шаг, способный разделить вашу жизнь на период «до» и «после» (прошли vimtutor), и теперь не знаете что делать с вашими новообретёнными способностями? А может вы всё ещё сидите в какой-нибудь IDE и в ус не дуете зачем вам «эти ваши программистские блокноты» и «какой-то там Vim»? Тогда присаживайтесь поудобнее и налейте себе лимонад, сейчас я вам всё по полочкам разложу.

(Статья рекомендуется к последовательному прочтению, но для вашего удобства ниже приведено оглавление)

  1. Вступление
  2. Менеджер плагинов
  3. Настойка внешнего вида
  4. Поддержка Русского языка
  5. Интеграция с внешними программами
  6. В кратце о(б)
  7. Заключение

Давайте определимся с терминологией

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

Рабочая среда — это набор программ для разработки ПО. Например, он может содержать компилятор, интерактивную консоль, редактор раположения GUI элементов, дебаггер и прочее. Редактор — это лишь маленький кусочек этого пазла.

IDE — это вся рабочая среда, сосредоточенная в одном месте. Конечно, есть программы наподобии Emacs (далее Емакс), где вы сами вольны вставить в неё всё, что вам угодно при должном умении, однако чаще всего это уже готовый, собранный за вас пакет.

Зачем мне нужен тогда Вим, если за меня всё сделает IDE?

Раньше весомым аргументом была его раскладка, так как она для многих удобнее современных Емаксо-подобных многокнопочных комбинаций клавиш для навигации и редактирования текста. Однако, благодаря Neovim и другим проектам, таким как VSCodeVim, она есть буквально везде.

Однако есть ещё один более весомый аргумент — производительность. В IDE часто имеется огромное количество функциональности, которым вы не пользуетесь, и фоновых процессов, которые сильно нагружают систему. Даже если ваш Макбук не орёт как истребитель от PyCharm или у вас не лагает скроллинг в Visual Studio (что невозможно, врунишки вы мои), а однопоточность Емакса не напоминает о первом Crysis или S.T.A.L.K.E.R., то всё равно встаёт вопрос энергопотребления и, как следствие, времени жизни батареи. Такое ПО в линукс сообществе характеризуют мемом термином «bloat».

Почему Вим?

У меня уже есть статья про все прелести этой программы. Однако она была написана человеком под впечатлением от новой игрушки с уровнем интеллекта второкурсницы (догадайтесь почему), что вылилось в настолько критично малое количество в ней смысла, что на её месте образовалась чёрная дыра. Ну хоть смешные картинки удались…

Что же я могу сказать про него сейчас, по прошествии года активного использования?

  1. Он очень быстрый. Ввиду особенностей его рендера, Вим имеет намного меньшую задержку, чем другие редакторы. После него другие редакторы кажутся неотзывчивыми, я уже молчу про выше упомянутые IDE.
  2. Его использование подобно прохождению третьего Dark Souls после первой части. Сначала сложно и непривычно, так как игра стала быстрее, и нельзя зачизить многие сложные моменты с помощью RPG составляющей, но потом приходит осознание того, что игра оказуалилась, и почти все боссы одолеваются со второй попытки.
  3. Он практически не тратит ресурсы и запускается даже на хлебушке, что очень хорошо сказывается на батарее.

В принципе, ничего откровенно плохого в других редакторах нет, так что оставьте этот выбор на сугубо ваше личное усмотрение. Меня не покидает уверенность, что вы сможете найти аналогичную статью для вашей любимой программы. Хотя, будем откровенными, редакторы на electron еле-еле проходят по критерию энергоэффективности.

В этой статье мы приведём Вим в удобоваримое состояние для серьёзной работы, а также научим его дружить с некоторыми сторонними программами для разработки. Учтите, что я буду рассказывать только про то, с чем мне довелось столкнуться лично, и если у вас интересные предложения, то добро пожаловать в комментарии.

Вставьте шутку про штепсель

Главным оружием для настройки нашего друга явлются плагины. По сути дела, это просто отдельные файлы с кодом на VimScript, которые исполняются при загрузке вашего файла настроек (~/.vimrc или ~/.config/nvim/init.vim) командой source. Ручками скачивать всё это довольно больно, поэтому великие умы человечества придумали пакетные менеджеры… для Вима!

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

Нашим подопечным сегодня выступит vim-plug. Но, прежде чем вы пойдёте его устанавливать, сначала нужно добавить пару строчек в ваш конфиг:

filetype plugin indent on "Включает определение типа файла, загрузку...
"... соответствующих ему плагинов и файлов отступов
set encoding=utf-8 "Ставит кодировку UTF-8
set nocompatible "Отключает обратную совместимость с Vi
syntax enable "Включает подсветку синтаксиса

Эти команды вы чаще всего встретите в инструкциях по установке различных плагинов. Теперь давайте установим сам менеджер пакетов. Тут есть нужные команды для Vim и Neovim, но существует способ для его автоматического скачивания. Для этого добавьте следущие строчки в свой конфиг:

if empty(glob('~/.vim/autoload/plug.vim')) "Если vim-plug не стоит
  silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs "Создать директорию
    \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim 
  "И скачать его оттуда
  "А после прогнать команду PlugInstall, о которой мы сейчас поговорим
  autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

Тогда при следующем запуске Вима, менеджер будет автоматически установлен, но его команды работать не будут и вы увидите ошибку. Хочу также заметить, что у вас в системе должен стоять curl, а для Neovim нужно поменять ~/.vim на ~/.local/share/nvim/site. Прежде чем вы перезапустите ваш редактор, предлагаю также добавить в настройки следущие строчки. Не забудьте изменить этот код для Neovim аналогично прошлому разу:

call plug#begin('~/.vim/bundle') "Начать искать плагины в этой директории
"Тут будут описаны наши плагины
call plug#end() "Перестать это делать

С этого момента у вас всё должно работать. Далее мы будем добавлять плагины меж этих строк по следующей схеме:

Plug 'пользователь/репозиторий' "Берём эти данные с гитхаба
"После чего перезагружаем файл настроек...
"... и исполняем команду :PlugInstall в панели команд

Есть и другие способы добавления плагинов в vim-plug и они подробно описаны на странице менеджера, но в них, чаще всего, нет нужды. Также, как вы могли догадаться, поиск плагинов осуществляется в общем случае Гуглом или этой прелестью. Также про них можно узнать из тематических форумов/сабреддитов и таких статей, как эта.

Слишком сложно

Красота требует настройки

Самая базовая и, вместе с тем, одна из самых важных модификаций для программы, в которой вы будете проводить более 90% своего рабочего времени — внешний вид. Если вы пользуетесь терминальным Вимом и уже настраивали консоль, то эти изменения должны отобразиться и на самом редакторе, но можно пойти и дальше. Начнём с выбора темы.

Так наш подопечный (MacVim) выглядит сейчас:

Выбор темы

Для Вима силами волонтёров было написано немеренно готовых тем. Из большинства популярных редакторов их давно уже всех портировали. Как по мне, главная отличительная особенность Sublime Text — его тема Monokai, которую мы сейчас вероломно апроприируем.

...
Plug 'ErichDonGubler/vim-sublime-monokai' "Добавьте это в список плагинов
...

colorscheme sublimemonokai "Добавьте это НЕ в список плагинов

Теперь вы можете презагрузить ваш файл настроек (или сам Вим), и насладиться раскулаченным добром. Аналогично вы можете поставить себе и другие темы, такие как Darcula, Solarized Dark и.т.д.

Улучшенная строка состояния

Теперь давайте настроим наш status bar. Основная идея состоит в том, чтобы красиво показывать важную информацию по аналогии с tmux и панелями в WM на экране, касающуюся редактирования текста. Для этого давайте поставим Airline:

...
Plug 'vim-airline/vim-airline' "В список плагинов
...

"Не в список плагинов
let g:airline_powerline_fonts = 1 "Включить поддержку Powerline шрифтов
let g:airline#extensions#keymap#enabled = 0 "Не показывать текущий маппинг
let g:airline_section_z = "\ue0a1:%l/%L Col:%c" "Кастомная графа положения курсора
let g:Powerline_symbols='unicode' "Поддержка unicode
let g:airline#extensions#xkblayout#enabled = 0 "Про это позже расскажу

Про Powerline мы поговорим далее, но главное, чего мы этим добьёмся, — секции строки состояния будут выделяться не прямоугольниками, а стрелками. Про Keymap мы поговорим в секции про интеграцию русского языка, но эта комманда просто скроет его индикатор из строки статуса (аналог останется в строке команд). Символ \ue0a1 — это красивая альтернатива «ln», но также мною был опущен процентный показатель конца файла, ибо мне он показался излишним.

Вид Airline по умолчанию:

Вид после нашего вмешательства:

Шрифт и иконки

Как видите, мы сделали только хуже. Проблема заключается в том, что вам нужно установить в ваш терминал или gui шрифты с поддержкой Powerline. Для первого воспользуйтесь настройками самой консоли, а для второго это командой:

"16 вы можете поменять на нужный вам размер шрифта
set guifont=имя_вашего_шрифта_в_системе:h26

Но не спешите сейчас ставить полюбившийся вам шрифт из того списка. Во-первых, подобных шрифтов в природе больше и их можно патчить самому. Например, мой любимый — это Fira Code, который поддерживает лигатуры (о них можете почитать там же). Во-вторых, есть ещё один отличный плагин Devicons, который добавляет в Airline и Nerdtree (файловый проводник) удобные иконочки.

...
Plug 'ryanoasis/vim-devicons' "Далее я про это напоминать не буду
...

Но и они не работают.

Для того, чтобы все наши красивости заработали нам нужен не просто пропатченный на поддержку Powerline шрифт, но и совместимый с Nerd Font, благо такая вариация Fira Code имеется. Тут от системы к системе последовательность действий будет отличаться, но на MacOS с brew этот шрифт ставится в два счёта:

# В терминале
brew tap homebrew/cask-fonts
brew cask install font-firacode-nerd-font

И подключим его так (в GUI. И да, «фура» тут намеренно):

set guifont=Fura\ Code\ Light\ Nerd\ Font\ Complete:h26 "Это light версия

Теперь все наши элементы кастомизации должны встать на место:

Стандартные опции

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

set guioptions= "Отключаем панели прокрутки в GUI
set showtabline=0 "Отключаем панель табов (окошки FTW)

"Сам по себе number показывает справа номера строк
"relativenumber - нумерацию строк относительно положения курсора
set number relativenumber "А это гибридный вариант. Протестируйте все

"wrap заставляет переносить строчки без их разделения
"Соответсвенно nowrap рендерит строчки за границами экрана
set wrap linebreak nolist "Данная вариация работает как wrap...
"... но переносит строчки не посимвольно, а по словам

"Предыдущий способ известен как soft wrapping
"При желании вы можете заставить Вим насильно разделять...
"... строчки в самом тексте вот так:
set textwidth=80 "Где 80 стоит заменить на нужную вам длину строки

set cursorline "А так мы можем подсвечивать строку с курсором

"Если вы используете обычный терминальный Вим, а не NeoVim, то...
"... для изменения курсора в разных режимах используйте это:
set ttimeoutlen=10 "Понижаем задержку ввода escape последовательностей
let &t_SI.="\e[5 q" "SI = режим вставки
let &t_SR.="\e[3 q" "SR = режим замены
let &t_EI.="\e[1 q" "EI = нормальный режим
"Где 1 - это мигающий прямоугольник
"2 - обычный прямоугольник
"3 - мигающее подчёркивание
"4 - просто подчёркивание
"5 - мигающая вертикальная черта
"6 - просто вертикальная черта

set macligatures "Включает поддержку лигатур в MacVim
"Лучше бы не поддерживал совсем

Русский ферштейн?

Наверное, самый главный отталкивающий фактор в освоении Вима, с которым сталкиваются все русскоговорящие программные инженеры — Русский язык. Не то, чтобы у меня была какая-то неприязнь к великому и могучему, но она есть у нашего редактора, причём ко всем языкам, отличным от Английского.

Вим обходит системные драйвера клавиатуры и сам обрабатывает ввод. Хорошая новость состоит в том, что это делает его самым быстрым и отзывчивым редактором среди конкурентов. Плохая новость — он считывает не нажатие клавиши, а введённые символы. Результирует это в том, что команды нормального режима (и много что ещё) на других раскладках не работают.

Лекарство для этой болезни искали люди давно, так как вечно ручками дёргать язык ввода неудобно. Когда появились более близкие к системе штуки, такие как gVim и MacVim, они тоже не справились (и не особо пытались). Поэтому на данный момент есть пара костылей:

Langmap

Наверное, при поиске решения в интернете, вы натыкались на строчки подобного характера:

set langmap=ФИСВУАПРШОЛДЬТЩЗЙКЫЕГМЦЧНЯ;ABCDEFGHIJKLMNOPQRSTUVWXYZ,фисвуапршолдьтщзйкыегмцчня;abcdefghijklmnopqrstuvwxyz

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

Keymap

Существует чуть более адекватный стандартный способ переключения раскладки:

"Если вы используете обычную qwerty, то поменяте mac на win
set keymap=russian-jcukenmac
"Язык ввода при старте Вима - Английский
set iminsert=0
"Аналогично настраивается режим поиска
set imsearch=0

Теперь вам просто нужно при входе в редактор удостовериться, что системная раскладка — английский и… научиться переключать язык по <C-^>… Да, это сочетание клавиш можно переназначить. Нет, не на ту же комбинацию клавиш, что и системое переключение.

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

Xkb-switch

Сие есть прекрасная консольная утилита для переключения раскладки в терминале. Сейчас мы в первый раз попробуем заставить Вим общаться с внешними программами. У Xkb-switch есть порты под три популярные операционные системы, но, как водится, здесь мы рассмотрим установку на MacOS. Для других систем вы можете найти инструкции на сайте плагина.

# Давайте сначала скачаем саму программу
git clone https://github.com/myshov/xkbswitch-macosx
# Установка происходит простым копированием в директорию в $PATH
cp xkbswitch-macosx/bin/xkbswitch /usr/local/bin/xkbswitch
# Аналогично мы поступим с библиотекой-интеграцией с плагином
git clone https://github.com/myshov/libxkbswitch-macosx
cp libxkbswitch-macosx/bin/libxkbswitch.dylib /usr/local/lib/libxkbswitch.dylib

А теперь победным маршем добавим эти строчки в конфиг:

...
Plug 'lyokha/vim-xkbswitch'
...

let g:XkbSwitchEnabled = 1 "Дёргаем рубильник

И все ваши проблемы решены. В основном потому что мы это сделали заранее. Помните строчку из настройки Airline, упоминавшую Xkb-switch? По дефолту наш статус бар показывает номер текущей раскладки, но (по крайней мере у меня) это заставляло скроллинг в Виме безбожно зависать вплоть до полной остановки работы, поэтому мы это просто отключили.

Теперь наш верный друг должен работать с разными раскладками как любой другой современный редактор. При переходе в режим вставки Xkb-switch будет переключать раскладку с английской, на последнюю, вами использованную и vice versa. Также он умеет автоматически адаптировать ваши сочетания клавиш под новые раскладки. Однако командный режим и режим замены снова за бортом.

Интегрируем дифференцируя

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

Размечтались

Slime

Наверное, один из самых полезных плагинов для Емакса — это Slime. Суть его работы заключается в введении новой комбинации клавиш Ctrl-C-C, которой вы можете посылать куски кода в REPL вашего любимого языка программирования. Благо умельцы забрали это чудо к нам:

...
Plug 'jpalardy/vim-slime'
...

Теперь, когда вы выделите текст и настучите этот шорткат, Slime пойдёт искать терминал с работающим screens и спросит название вашей сессии и номер окна, после чего пошлёт в него ваш текст и исполнит. При желании, можете перенастроить её на работу с tmux и даже встроенным в Вим терминалом (да, в Виме есть терминал). Примеры перенастройки:

"Для tmux
let g:slime_target = "tmux"

"Для обычного Вима
let g:slime_target = "vimterminal"

"Для Вима избранных
let g:slime_target = "neovim"
Jupyter

От посылочек с кодом в общем случае, давайте перейдём к более узкому. Jupyter — это бывший iPython, который предоставляет очень удобную консоль для исполнения питоновских команд с поддержкой рендера графиков и изображений в matplotlib. У него есть встроенный редактор notebook и чуть менее встроенный lab, но оба — довольно печальное зрелише.

Давайте сначала сгенерируем и настроим конфиг для… Нет, не для Вима, а для Jupyter:

jupyter qtconsole --generate-config
vim ~/.jupyter/jupyter_qtconsole_config.py

Теперь найдите эту строчку

#c.ConsoleWidget.include_other_output = False

и раскомментируйте её, заменив False на True.

А теперь добавьте это в конфиг уже Вима для установки Jupyter-vim:

...
Plug 'jupyter-vim/jupyter-vim'
...

Теперь вы можете, открыв ваш код на Python (или на другом поддерживаемом языке), разбить его на блоки (начало блока обозначается символом ## или #%%) и подключиться к Jupyter. Для этого вам его нужно сначала запустить:

jupyter qtconsole &

А в самом Виме вбить

:JupyterConnect "Не в конфиге, а в редакторе

Теперь по нажатию \X (если \ — ваш <localleader>) вы исполните в Jupyter блок кода, на котором у вас стоит курсор, а по нажатию \R вы прогоните весь файл. Больше сочетаний клавиш вы можете найти на сайте плагина.

К сожалению, тут не всё так гладко. Сам плагин часто забывает скомпилировать свои команды, и его приходится вызвать костылями:

nnoremap <leader>jc :call jupyter#Connect()<CR> "как пример

А сам Jupyter обожает переодически крашиться и не убивать свои питоновские процессы, что очень пагубно вляет на плагин. Он впадает в хроническию депрессию, смотрит с упоением на кухонные приборы, строя вокруг них планы по составлению компании усопшему, и отказывается отвечать на ваши пинки до перезагрузки системы.

Думаю, ему можно это простить, так как других альтернатив нет. Если у вас есть желание помочь его разработке и заработать социальные плюсы, то вы найдёте его код всё там же — на гитхабе.

LaTeX

Конечно, Вим можно использовать как средство написания кода, но он более универсален. Ответ «насколько» кроется в самом термине «текстовый редактор» — в нём можно редактировать текст (неожиданно, не так ли?). Это значит, что в нём можно написать курсовую или дипломную.

В чём пишут такие типы документов и, в принципе, научные работы? Правильно, в LaTeX! Конечно, этой технологии можно найти ещё море применений, но для всех них можно использовать наш программисткий блокнот. Поэтому давайте скачаем и установим Vimtex.

...
Plug 'lervag/vimtex'
...

let g:tex_flavor = 'latex' "Уточняем какой Тех

"Отключаем автоматическое открытие окна Quickfix
let g:vimtex_quickfix_mode = 0

Теперь, если вы войдёте в файл с расширением .tex и введёте <localleader>ll (или :VimtexCompile), то у вас скомпилируется проект, предупреждения и ошибки отправятся в Quickfix и Location списки, а также откроется системный просмотрщик pdf.

Однако в MacOS её Preview не умеет автоматически обновлять документ при его изменении и на него приходится тыкать мышкой. В Линуксе очень любят программу Zathura, у которой схожие с Вимом элементы управления и есть возможность поменять цвета документа и элементов интерфейса, чтобы получить тёмную тему. Давайте её настроим:

# Это пример установки на MacOS (не забудьте про XQuartz)
brew tap zegervdv/zathura
brew install zathura --with-synctex
brew install zathura-pdf-poppler

# Настраиваем плагины (требуется после каждой переустаноки)
mkdir -p $(brew --prefix zathura)/lib/zathura
ln -s $(brew --prefix zathura-pdf-poppler)/libpdf-poppler.dylib $(brew --prefix zathura)/lib/zathura/libpdf-poppler.dylib

# И нам нужна эта зависимость
# Но она замедляет инициализацию Vimtex
# Так что выбор за вами
brew install xdotool

Теперь попросим Vimtex использовать zathura по умолчанию:

let g:vimtex_view_method = 'zathura'

С этого момента в Linux у вас должна по умолчанию открываться ваша новая программа для просмотра pdf. Однако в системе для любителей сорта макинтош такой важный функционал не завезли, поэтому вам придётся её запусткать ручками: сворачиваем Vim нажатием <C-z>, вводим zathura имя_файла.pdf & и возращаемся в Вим — fg.

Если вы хотите такие же цвета, то добавьте эти строчки в ~/.config/zathura/zathurarc (учтите, что это инвертирует даже в вложенные изображения)

set recolor true
set recolor-darkcolor "#dcdccc"
set recolor-lightcolor "#1f1f1f"
Markdown

К сожалению, у LaTeX есть несколько небольших проблем. Он слишком комплексный для относительно простых задач и довольно медленно компилируется. Но наши мольбы об идеале услышали боги вёрстки и сотворили такую прекрасную вещь как Markdown.

Markdown (также известный как «та штука с гитхаба») — это очень простой язык разметки, который мановением волшебной палочки компилируется в HTML. Он очень удобен для написания больших текстов с незамысловатым форматированием (как эта статья). К счастью, фанатов у него много, поэтому и плагинов для Вима под него — море.

Давайте рассмотрим плагин Livedown. Его главная задача — представлять из себя vimtex для markdown. По сочетанию клавиш он открывает ваш файл в браузере и далее продолжает его обновлять при каждом сохранении исходников. Но сначала вам придётся установить Nodejs и пакет для него:

# Применимо к MacOS
brew install node
# Универсально
npm install -g livedown

А это добавьте в конфиг:

...
Plug 'shime/vim-livedown'
...

"Поменяйте сочетание клавиш на любое вам удобное
nnoremap <leader>ld :LivedownToggle<CR>

Теперь при введении команды <leader>ld (или ваш вариант) вы можете включать плагин или выключать. Кстати, он также умеет отображать HTML файлы, но он всё ещё думает, что они на markdown написаны, так что ожидайте некоторые «странности» вёрстки.

Как уже упоминалось, плагинов для markdown в Виме — великое множество. Мне также довелось пощупать чудо по имени Markdown-preview. Он исполняет те же функции, что и Livedown, но умеет скроллить скомпилированный текст в зависимости от положения вашего курсора и закрывается при переключении буффера (а не по выходу из редактора). Мне лично он понравился меньше, но это уже вкусовщина.

Блиц раздел

Как и было обещано, мы рассмотрели некоторые важные аспекты рабочей среды, которые мы успешно (относительно) смогли связать с нашим любимым редактором. Насчёт других аспектов я с полной уверенностью говорить не могу, так как у меня с ними мало опыта, но на затравочку давайте пробежимся по некоторым интересным вещам:

Комментарии про отладку

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

Это не является минусом конкретно Vim, так как в том же Sublime Text дела обстоят не лучше. Хотя вам никто не мешает просто научиться ими пользоваться из консоли. Туториалов на эту тему полно, и сам процесс несложный.

Если вы заложник яблока, то используйте гайды для gdb, но сами туда подставляйте аналогичные команды из lldb с помощью этого сайта.

Уход за проектом

В Виме есть встроенная команда :make, которая ведёт себя как одноимённая программа для терминала. Плюс этого подхода в том, что она вас носом проведёт по всем предупреждениям и ошибкам, указывая на то, что её беспокоит (это поведение настраивается).

Про настройку проверки синтаксиса и непосредственного написания кода уже написано много статей, но могу посоветовать установить YouCompleteMe для автодополнения по табу, отключить у него проверку синтаксиса и поставить для неё Neomake:

...
Plug 'Valloric/YouCompleteMe'
Plug 'neomake/neomake'
...
"Не забудьте, что YCM нужно компилировать после каждого обновления
"Например: python3 ~/.vim/bundle/YouCompleteMe/install.py --clang-completer

let g:ycm_show_diagnostics_ui = 0 "Обрубаем YCM

"А вот пример настройки работы Neomake
let g:neomake_cpp_clang_maker = {
   \ 'exe': 'clang++',
   \ 'args': ['-I/usr/local/include/wx-3.0', '-std=c++17'],
   \ }
Прыжки по тегам

У Вима есть встроенная комбинация клавиш <C-]>, который позволяет вам перейти к имплементации выделенного термина. Однако для его работы нужны те самые тэги. Сгенерировать их можно терминальной командой ctags:

# В корне проекта прогоните это
ctags -R &

Если вам нужно перейти к объявлению этого термина, то вам поможет (у вас должен быть установлен YCM):

"Наведите курсор на нужный термин и введите команду:
:YcmCompleter GoToDeclaration

Однако, постоянно отправлять Вим в задний фон и запускать ручками команду — не очень удобно. Также не очень удобно в больших проектах подолгу ждать выполнение индексации. Но у меня и для этой проблемы найдётся ответ…

Асинхронные команды

Одним из недавних трендов программирования является асинхронность. Она позволяет одновременно выполнять несколько разных задач, но сама программа остаётся однопоточной.

Вим — однопоточная программа (ему можно, у него амбиции ниже). Поэтому, если на него слишком много плагинов, то он поползёт со скоростью улитки. Но начиная с версии 8 (ну и в NeoVim это тоже есть) в него добавили API для асинхронных вызовов. Теперь ваш линтер, работающий в реальном времени, не будет замедлять сам процесс редактирования текста.

Давайте в качестве нашего подопечного возьмём плагин AsyncRun. Он умеет запускать асинхронно терминальные программы как в Vim 8, так и в NeoVim (ну и всех их разновидностях).

...
Plug 'skywind3000/asyncrun.vim'
...

nnoremap <F3> :AsyncRun ctags -R<CR>

Теперь по нажатию клавиши F3 вы будете прогонять рекурсивно в директории проекта ctags. Вы всегда можете посмотреть вывод запущенной через AsyncRun программы в окне Quickfix. Умышленно убить программу в заднем фоне можно с помощью команды AsyncStop.

Соответственно, вызывать zathura можно также асинхронно:

:AsyncRun zathura mew.pdf
Интеграция с Git

Человечеством ещё не было придумано более удобного способа пользоваться Git, чем через терминал. Многие IDE пытались бороться с такой тенденцией, но либо упрощали процесс настолько, что терялись важные фичи, либо усложняли до безумия. Но для фанатов делать всё из-под Вим таки нашёлся плагин Fugitive, просто оборачивающий всеми любимые команды.

Однако, по аналогии с прошлым пунктом, можно пойти и дальше, добавив немного асинхронности. :Gfetch и :Gpush умеют пользоваться сторонними реализациями :Make, так что для нашей затеи вам понадобится лишь добавить эту строчку в свой конфиг:

command! -bang -nargs=* -complete=file Make AsyncRun -program=make @ <args>

Заключение

Главная задача этой статьи состояла не сколько в доказательстве того, что IDE откровенно плохи, а в том, чтобы показать вам, что Вим тоже имеет порох в пороховницах. Если вы потратите время на настройку окружения под него, то получите более быструю, эффективную и понятную рабочую среду. И да, пожалуйста, не пытайтесь в комментариях доказать, что какой-то стиль редактирования лучше или хуже других. Не докажете.

Надеюсь, что вы хорошо провели время, читая эту статью (написанную в NeoVim) и…

Источники

Ссылки на все плагины уже указаны в статье, но

  1. Мой конфиг, на котором основанна эта статья можно найти тут
  2. Ещё раз упомяну VimAwesome
  3. Также многие проблемы были решены пролистыванием Reddit
  4. В вики тоже много полезных лайфхаков для решения проблем без плагинов

VI Editor с командами в Linux / Unix Tutorial

  • Home
  • Testing

      • Back
      • Agile Testing
      • BugZilla
      • Cucumber
      • Database Testing
      • Database Testing
        • Назад
        • JUnit
        • LoadRunner
        • Ручное тестирование
        • Мобильное тестирование
        • Mantis
        • Почтальон
        • QTP
        • Назад
        • Центр качества
        • 000300030003 SoapUI
        • Управление тестированием
        • TestLink
    • SAP

        • Назад
        • AB AP
        • APO
        • Начинающий
        • Basis
        • BODS
        • BI
        • BPC
        • CO
        • Назад
        • CRM
        • Crystal Reports
        • QM4O
        • Заработная плата
        • Назад
        • PI / PO
        • PP
        • SD
        • SAPUI5
        • Безопасность
        • Менеджер решений
        • Successfactors
        • SAP Tutorials

        4

      • Web
      • Apache
      • AngularJS
      • ASP.Net
      • C
      • C #
      • C ++
      • CodeIgniter
      • СУБД
      • JavaScript
      • Назад
      • Java
      • JSP
      • Kotlin
      • Linux
      • Linux
      • Kotlin
      • Linux
      • js

      • Perl
      • Назад
      • PHP
      • PL / SQL
      • PostgreSQL
      • Python
      • ReactJS
      • Ruby & Rails
      • Scala
      • SQL
      • 000

      • SQL
      • 000

        0003 SQL

        000

        0003 SQL

        000

      • UML
      • VB.Net
      • VBScript
      • Веб-службы
      • WPF
  • Обязательно учите!

      • Назад
      • Бухгалтерский учет
      • Алгоритмы
      • Android
      • Блокчейн
      • Business Analyst
      • Создание веб-сайта
      • CCNA
      • Облачные вычисления
      • 00030003 COBOL
          9000 Compiler

            9000 Встроенные системы

          • 00030002 9000 Compiler
            • Ethical Hacking
            • Учебные пособия по Excel
            • Программирование на Go
            • IoT
            • ITIL
            • Jenkins
            • MIS
            • Сети
            • Операционная система
            • 00030003
            • Назад
            • Управление проектами Обзоры

            • Salesforce
            • SEO
            • Разработка программного обеспечения
            • VB A
        • Big Data

            • Назад
            • AWS
            • BigData
            • Cassandra
            • Cognos
            • Хранилище данных
            • 0003

            • HBOps
            • 0003

            • HBOps
            • MicroStrategy
            • MongoDB

        .

        vundle — Как я могу изменить команду редактора в vim?

        Переполнение стека

        1. Около
        2. Продукты

        3. Для команд
        1. Переполнение стека
          Общественные вопросы и ответы

        2. Переполнение стека для команд
          Где разработчики и технологи делятся частными знаниями с коллегами

        3. Вакансии
          Программирование и связанные с ним технические возможности карьерного роста

        4. Талант
          Нанимайте технических специалистов и создавайте свой бренд работодателя

        5. Реклама
          Обратитесь к разработчикам и технологам со всего мира

        6. О компании

        .Команда

        — как найти файл vimrc, используемый редактором vim?

        Переполнение стека

        1. Около
        2. Продукты

        3. Для команд
        1. Переполнение стека
          Общественные вопросы и ответы

        2. Переполнение стека для команд
          Где разработчики и технологи делятся частными знаниями с коллегами

        3. Вакансии
          Программирование и связанные с ним технические возможности карьерного роста

        4. Талант
          Нанимайте технических специалистов и создавайте свой бренд работодателя

        5. Реклама
          Обратитесь к разработчикам и технологам со всего мира

        6. О компании

        .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *