Vim (Русский)

Vim является расширенной версией Vi с дополнительными функциями, которые помогают редактировать исходных код. Некоторые улучшения Vim включают в себя: сравнение файлов(vimdiff), подсветка синтаксиса, комплексная система помощи, встроенная поддержка скриптов(vimscript) и визуальный режим для простоты выделения. Vim фокусируется на использовании клавиатуры, это не простой редактор как nano или pico. Он занимает время для изучения и целую жизнь для освоения.

Установка

Пакеты с интерфейсом командной строки:

  • vim-minimal - облегченная версия.
  • vim - версия с поддержкой интерпретаторов Python 2, Lua и Ruby, но без графической оболочки.
  • vim-python3 - тоже самое что и vim, но уже с поддержкой интерпретатора Python 3.

Пакеты с графическим интерфейсом:

  • gvim - идентичен vim, но имеет интерфейс GTK+.
  • gvim-python3 - идентичен gvim, но имеет поддержку интерпретатора Python 3.
Обратите внимание: Неофициальный репозиторий herecura-stable также предоставляет несколько версий Vim/gVim: vim-cli vim-gvim-common vim-gvim-gtk vim-gvim-qt vim-rt vim-tiny

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

Это основной обзор о том, как использовать Vim. Также, вы можете запустить vimtutor/gvimtutor для получения справки встроенной в Vim.

Vim имеет четыре различных режима:

  • Командный режим (Command mode): нажатия клавиш интерпретируются как команды.
  • Режим вставки (Insert mode): нажатия клавиш вводятся в файл.
  • Визуальный режим (Visual mode): нажатия клавиш выделяют, вырезают или копируют текст.
  • Режим редактора Ex (Ex mode): режим ввода команд редактора Ex(например, сохранение файла, замена текста и т.д.).

Основы редактирования

Если вы запустите Vim с помощью:

$ vim somefile

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

Обратите внимание: Vim является примером классической философии Unix. Он имеет сложную систему обучения, но как только вы запустите его, вы увидите, что он является чрезвычайно мощным. Также, все команды чувствительны к регистру. Иногда команды в верхнем регистре “тупые“ (s заменяет символ, в то время как S заменяет строку), в других случаях это совершенно разные команды (j перемещает вниз, в то время как J соединяет две строки).

Вы пишете текст (он вставляется перед курсором) с помощью команды i. I (i в верхнем регистре) вставляет текст в начало строки. Чтобы добавить текст после курсора используют a. A тоже самое только курсор перемещается к концу строки. И вы вернетесь в командный режим в любое время, нажав клавишу Esc.

Перемещение

В Vim, вы можете перемещать курсор с помощью клавиш со стрелками, но это не путь Vim (Vim way). Вам придется перемещать вашу правую руку полностью от стандартного положения набора текста полностью к клавишам со стрелками, а затем обратно. Не весело.

В Vim, вы можете переместиться вниз нажав j. Вы можете помнить об этом, потому что “j“ опущена вниз. Вы перемещаете курсор назад нажимая k. Влево h (слева от “j“} и вправо это l (L в нижнем регистре).

^ переместит курсор в начало строки, а $ переместит его в конец.

Обратите внимание: ^ и $ обычно используют в регулярных выражениях для соответствия начала и конца строки. Регулярные выражения очень мощны и обычно используются в *nix системах, может быть они немного сложны сейчас, но позже у вас появится “идея“ о том как использовать большинство из них

w переместит курсор через слово. W будет включать в себя несколько больше символов в то, что Vim считает словом (например, знак подчеркивания и тире). b перемещает курсор назад на слово, B будет включать в себя несколько больше символов в то, что Vim считает словом. Чтобы переместиться в конец слова, используйте e, E включает в себя больше символов.

( переместит курсор в начало предложения. ) делает обратное, перемещает в конец предложения. { переместит курсор в начало абзаца. } делает обратное, перемещает в конец абзаца.

H переместит курсор в вверх экрана, M в центр, L вниз. gg переместит курсор в начало файла, G в конец.

Повтор команд

Если перед командой стоит число, то эта команда будет выполняться столько раз, сколько ввел пользователь (есть исключения, но они имеют смысл, например команда s). Например, печатая 3i затем “Help!“, эта команда выведет “Help!Help!Help!“. Печатая 2} вы перенесетесь на два абзаца вперед. Это очень удобно со следующими командами...

Удаление

Команда x удаляет символ под курсором. X удалит символ перед курсором. Это именно те команды с которыми можно повеселиться. 6x удалит 6 символов. Нажав . (точка) вы повторите предыдущую команду. Итак, к примеру у вас есть слово “foobar“ в нескольких местах, но потом вы ходите сделать из него слово “foo“. Поместите курсор под “b“, введите 3x, переместитесь к следующему “foobar“ и нажмите . (точка).

Команда d говорит Vim, что вы хотите удалить что - то. После ввода d надо сказать Vim, что вы именно хотите удалить. Здесь вы можете использовать команды перемещения. dW удалит все до следующего слова. d^ удалит все до начала линии. Также, команды будут работать если перед ними будет число: 3dW удалит три слова, D (верхний регистр) это команда для удаления всего до конца линии (в основном используется d$). dd удалит всю линию.

Отмена и повтор

Vim имеет встроенный буфер обмена. Действия могут быть отменены при помощи u и возвращены с помощью ctrl + r.

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

Нажав v вы перейдете в визуальный режим. Здесь вы передвигаете курсор чтобы выделять текст, когда вы закончили, нажмите y чтобы скопировать текст в буфер, иначе используйте c чтобы вырезать его. p вставляет вырезанное после курсора, P перед курсором. Введите V для режима визуальной строки, выделение по линиям. Введите ctrl + v для визуального блока, выделение по блокам.

Обратите внимание: Когда вы удаляете что - нибудь, это что - то помещается внутри буфера и доступно для вставки.

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

Для поиска буквы или слова в файле, обычно используют / и тогда вы вводите символы которые требуются искать и нажимаете enter. Чтобы посмотреть следующее соответствие нажимайте n, N для предыдущего соответствия.

Для поиска и замены используйте команду замены :s/. Синтаксис: [диапазон]s///[аргументы]. Например:

Команда         Результат
:s/xxx/yyy/     Замена xxx на yyy в первом случае
:s/xxx/yyy/g    Замена xxx на yyy в каждом случае на каждой линии
:s/xxx/yyy/gc   Замена xxx на yyy глобально с подтверждением
:%s/xxx/yyy/g   Замена xxx на yyy глобально по всему файлу
:#,#s/xxx/yyy/g Замена xxx на yyy в диапазоне строк

Вы можете использовать глобальную команду :g/ для поиска шаблонов, а затем выполнения команды для каждого совпадения. Синтаксис: [диапазон]:g//[команда].

Команда  Результат
:g/^#/d  Удаление всех линий, которые начинаются с #
:g/^$/d  Удаление всех пустых линий

Сохранение и выход

Для сохранения и/или выхода, вам понадобится режим Ex. Командам режима Ex предшествует :. Чтобы записать файл используйте :w или если у файла нет имени, используйте w filename. Выйти можно при помощи :q. Если вы не хотите сохранять изменения, используйте :q!. Для того чтобы сохранить изменения и выйти, используйте :x.

Дополнительные команды

  1. dd удалит текущую строку (используйте ddp для быстрой смены строки)
  2. cc удалит текущую строку и переведет вас в режим замены
  3. o создаст новую строку ниже текущей и переведет вас в режим замены, O создаст новую строку выше текущей и переведет вас в режим замены
  4. yy скопирует всю строку в буфер
  5. * подсветит текущее слово и n используется для его поиска

Настройка

Конфигурационный файл Vim лежит в домашней директории: ~/.vimrc, и файлы расположены внутри ~/.vim/. Глобальный файл конфигурации расположен в /etc/vimrc. Глобальные файлы расположены внутри /usr/share/vim.

Глобальный файл конфигурации Vim в Arch Linux очень прост, но он отличен от файла конфигурации Vim других дистрибутивов. Чтобы получить ожидаемые улучшения (такие как подсветка синтаксиса, возвращение курсора в последнюю запомненную позицию), рассмотрим их, используя пример конфигурационного файла Vim:

# mv /etc/vimrc /etc/vimrc.bak
# cp /usr/share/vim/vim74/vimrc_example.vim /etc/vimrc

Циклический поиск

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

set wrapscan

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

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

:filetype plugin on
:syntax on

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

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

Чтобы включить эту особенность, добавьте линию в ~/.vimrc:

set mouse=a
Обратите внимание:
  • Это работает даже в PuTTY через SSH.
  • В PuTTY, нормальная подсветка/копирование изменены, потому что Vim входит в визуальный режим когда используется мышь. Чтобы нормально выделять текст мышкой, удерживайте Shift пока выделяете текст.

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

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

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

Пример ~/.vimrc

Пример конфигурации Vim.

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

Vim включает в себя редактор diff (программа, которая помогает объединять различия между двумя [или более] файлов). vimdiff открывает вертикальный, с несколькими панелями, вид, что и подчеркивает различия между файлами. Команда для запуска: vimdiff файл1 файл2. Вот список команд vimdiff. Для основ Vim редактирования, прочитайте туториал.

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

Хитрости

Решение определенных задач пользователя.

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

  1. :set number нумерация строк.
  2. :set relativenumber относительная нумерация строк.
  3. :<номер строки> чтобы перепрыгнуть на определенную строку.

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

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

set spell

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

Действие Команда
следующая ошибка ]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 *.txtsetfiletype plaintext. Далее, вставьте строку autocmd FileType plaintext setlocal spell spelllang=ru_ru в ваш ~/.vimrc или /etc/vimrc файл и перезапустите Vim.
  • Чтобы включить проверку орфографии только для файлов LaTeX (или TeX), добавьте autocmd FileType tex setlocal spell spelllang=ru_ru в ваш ~/.vimrc или /etc/vimrc файл и перезапустите Vim. Для проверки орфографии в языках отличных от Русского, просто замените ru_ru на значение соответствующему вашему языку.

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

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

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

Замена команд Vi на Vim

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

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

Если есть ^M в конце каждой линии, то это означает, что вы редактируете текстовый файл, который был создан в MS-DOS или Windows. В Linux это называется символом новой строки в Windows, они называются возвратом каретки.

Для замены окончаний строк Windows (принимайте во внимание, что ^ является буквой), нажмите Ctrl+V,Ctrl+M чтобы получить правый символ управления:

:%s/^M//g

В качестве альтернативы установите пакет dos2unix и запустите dos2unix файл.

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

Когда используется Window manager (Русский) настроенный на игнорирование размеров окна, gVim будет заполнять нефункциональные области с помощью стандартного фонового цвета темы GTK.

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

set guiheadroom=0
Обратите внимание: Если вы установите ноль, вы не увидите нижнюю горизонтальную полосу прокрутки.

Плагины

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

Менеджеры плагинов

Кросс-платформенным методом установки и управлением плагинами Vim через менеджер плагинов. Менеджер плагинов - это плагин который выполняет роль пакетного менеджера плагинов Vim.

  • Vundle в настоящее время наиболее популярный менеджер плагинов Vim
  • pathogen.vim простой плагин для редактирования runtimepath Vim'а.

Pacman

Группа vim-plugins включает в себя много плагинов:

pacman -Ss vim-plugins

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 индексировал (Cscope может обрабатывать множество языков, но для примера мы возьмем только .c, .cpp и .h файлы):

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

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

cscope -bq
Обратите внимание: Вы должны просматривать файлы вашего проекта из этой же локации или установить или экспортировать переменную $CSCOPE_DB, указав там cscope.out файл.

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

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

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

#ctrl-c используется чтобы найти функции вызывающую функцию 
nnoremap <C-c> :cs find c <C-R>=expand("<cword>")<CR><CR>

Taglist

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

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

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

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

AfterColors

Пакет vim-plugin-aftercolors активирует директорию (локальную и системную) vim/after/colors, что позволяет настройкам colorschemes быть перезаписанными.

Стандартная локальная директория ~/.vim/after/colors является директорией по умолчанию, которая желательно должна быть быть создана.

Перед изменением настроек полезно прочитать colorscheme файл, иногда авторы оставляют заметки и текущие настройки могут быть пересмотрены. Чтобы перезаписать текущие настройки, создайте файл с именем который соответствует имени файла colorscheme (например, ~/.vim/after/colors/desert.vim) и введите альтернативные настройки. Для примера:

~/.vim/after/colors/desert.vim
highlight CursorLine ctermbg=232

Если другой экземпляр Vim работает, то для перезагрузки перезаписанных настроек colorscheme:

colorscheme desert

Изменения могут также быть испытаны перед переопределением, они сохранятся непосредственно с Vim. Например, чтобы вывести список всех colorscheme:

:highlight

Чтобы увидеть определенные настройки (совет: включите wildmenu чтобы увидеть tab-competitions):

:highlight CursorLine

Чтобы временно изменить настройку:

highlight CursorLine ctermbg=234

Чтобы узнать какой цвет использовать, число цветов поддерживаемое в терминале должно быть узнано. Вот пару ссылок со сценариями и описаниями: ссылка1, ссылка2, ссылка3.

Ресурсы

Официальные

Руководства

Видео

Игры

Примеры конфигурации

Другие

  • HOWTO Vim - статья Gentoo Wiki на которой базировалась эта статья (автор не известен).
  • Vivify - Редактор Color.Scheme для Vim.
  • Usevim - Часто обновляемый блог о плагинах, хитростях и т.д.
  • Vim Awesome - Сайт, который сортирует плагины Vim по популярности среди пользователей GitHub.
  • Basic Vim Tips - Справочная таблица Vim, в первую очередь ориентированная на начинающих.