Vim (Русский)
Vim является расширенной версией vi с дополнительными функциями, которые помогают редактировать исходный код. Некоторые улучшения Vim включают в себя: сравнение файлов (vimdiff), подсветку синтаксиса, полноценную систему помощи, встроенную поддержка скриптов (vimscript) и визуальный режим для простоты выделения.
Vim фокусируется на использовании клавиатуры; он не является простым текстовым редактором, как, например, nano или pico. Он требует много усилий для освоения и еще больше времени для привыкания.
Contents
Установка
Установите один из следующих пакетов, доступных в официальных репозиториях.
Пакеты с интерфейсом командной строки:
- vim-minimal — облегченная версия.
- vim — версия с поддержкой интерпретаторов Python 2, Lua и Ruby, но без графической оболочки.
- vim-python3 — тоже самое что и
vim
, но уже с поддержкой интерпретатора Python 3.
Пакеты с графическим интерфейсом:
- gvim — идентичен
vim
, но имеет интерфейс GTK+. - gvim-python3 — идентичен
gvim
, но имеет поддержку интерпретатора Python 3.
Использование
Здесь представлен поверхностный обзор использования Vim. Вы также можете запустить vimtutor/gvimtutor для отображения руководства по использованию Vim.
Vim имеет четыре различных режима:
- Командный режим (Command mode): отображается приглашение для ввода команд.
- Режим ввода (Insert mode): непосредственный ввод текста.
- Визуальный режим (Visual mode): в этом режиме вы можете выделять, копировать и вставлять текст.
- Режим Ex (Ex mode): режим ввода дополнительных команд из редактора Ex (например, сохранение файла, замена текста и т.д.).
Основы редактирования
Если вы запустите Vim с помощью:
$ vim файл.txt
то вы увидите пустой документ (при условии что файл.txt
не существует; если он существует, вы увидите его содержимое). Вы будете не в состоянии редактировать файл — сейчас вы в Командном режиме. В этом режиме вы отдаете команды Vim с помощью клавиатуры.
Вы пишете текст (он вставляется перед курсором) с помощью команды i
. Та же команда в верхнем регистре (I
) вставляет текст в начало строки. Для добавления текста после курсора, наберите a
. Ввод A
переместит курсор в конец текущей строки. Вы можете вернуться в командный режим в любое время, нажав клавишу Esc
.
Перемещение
Вы можете перемещать курсор с помощью клавиш со стрелками, но это не подход Vim. Вам придется полностью передвигать вашу правую руку от положения набора текста к клавишам со стрелками, а затем обратно. Не слишком весело.
Чтобы переместиться вниз нажав j
; вернуться обратно наверх вы можете нажатием k
. Передвинуть курсор влево — h
, вправо — l
(L
в нижнем регистре).
^
переместит курсор в начало строки, а $
переместит его в конец.
w
переместит курсор через слово. W
сделает то же самое, но при этом включается несколько больше символов в то, что Vim считает словом (например, знак подчеркивания и минус). b
и B
работают аналогично, но перемещают курсор в обратном направлении. Наконец, чтобы переместиться в конец текущего слова, используйте e
и E
соответственно.
(
переместит курсор в начало предложения. )
делает обратное, перемещая его в конец предложения. Для передвижения по абзацу используйте {
и }
.
H
переместит курсор наверх экрана, M
— в центр, L
— вниз. gg
переместит курсор в начало файла, G
— в конец.
Повтор команд
Если перед командой стоит число, то эта команда будет выполняться столько раз, сколько ввел пользователь (есть исключения, но идея все та же — например, при использовании с командой s
). Например, печатая 3i
затем Help!
, эта команда выведет 2}
. Печатая 2}
вы перенесетесь на два абзаца вперед. Это бывает очень удобно со следующими командами.
Удаление
Команда x
удаляет символ под курсором. X
удалит символ перед курсором. Это именно те команды, с которыми можно повеселиться. 6x
удалит 6 символов. Нажав .
(точка) вы повторите предыдущую команду. Итак, к примеру у вас есть слово foobar
в нескольких местах, но потом вы ходите сделать из него слово foo
. Поместите курсор под b
и введите 3x
. Теперь переместитесь к символу b
следующего слова foobar
и нажмите .
(точка).
Команда d
говорит Vim, что вы хотите что-то удалить. После ввода d
надо указать Vim, что вы именно хотите удалить. Здесь вы можете использовать команды перемещения. dW
удалит все до следующего слова. d^
удалит все до начала линии. Также, команды будут работать если перед ними будет число: 3dW
удалит три слова. D
(верхний регистр) это команда для удаления всего до конца линии (имеет тот же эффект, что и d$
). dd
удалит всю линию.
Для замены текущего слова, поместите курсор над ним и наберите команду cw
. Это удалит слово и переведет редактор в режим ввода. Аналогично, s
удаляет один символ под курсором и переведет редактор в режим ввода. S
удалит строку целиком и переведет редактор в режим ввода. Чтобы просто заменить один символ, используйте r
, R
переведет вас в режим замены.
Отмена и повтор
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 имя_файла
. Выйти можно при помощи :q
. Если вы не хотите сохранять изменения, используйте :q!
. Для того чтобы сохранить изменения и выйти, используйте :x
.
Дополнительные команды
-
dd
удалит текущую строку (используйтеddp
для быстрой смены строки). -
cc
удалит текущую строку и переведет вас в режим ввода. -
o
создаст новую строку ниже текущей и переведет вас в режим замены,O
создаст новую строку выше текущей и переведет вас в режим замены. -
yy
скопирует всю строку в буфер. -
*
подсветит текущее слово иn
используется для его поиска.
Настройка
Пользовательский файл настроек Vim лежит в домашней директории: ~/.vimrc
, а файлы Vim пользователя расположены внутри ~/.vim/
. Глобальный файл настроек расположен в /etc/vimrc
. Глобальные файлы Vim расположены внутри /usr/share/vim
.
Глобальный файл настроек Vim в Arch Linux очень прост, но отличается от стандартного файла настроек в других дистрибутивах. Чтобы получить более-менее стандартное поведение (например, подсветку синтаксиса, возвращение курсора в последнюю запомненную позицию и т.д.), рассмотрим настройки, используя пример файла настроек Vim:
# mv /etc/vimrc /etc/vimrc.bak # cp /usr/share/vim/vim74/vimrc_example.vim /etc/vimrc
Подсветка синтаксиса
Чтобы включить подсветку синтаксиса (Vim поддерживает огромный список языков программирования):
:filetype plugin on :syntax 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 позволяет пользоваться мышью, но только в тех терминалах, которые это поддерживают (вас нужен xterm с установленным gpm, смотрите подробнее на странице Console mouse support).
Чтобы включить эту особенность, добавьте линию в ~/.vimrc
:
set mouse=a
Переход на новую строку с помощью клавиш со стрелками
По умолчанию, при нажатии ←
в начале строки или →
в конце, курсор не переводится на следующую/предыдущую строку.
Это можно исправить с помощью добавления строки set whichwrap=b,s,<,>,[,]
в ваш файл ~/.vimrc
.
Пример ~/.vimrc
Смотрите Vim/.vimrc.
Объединение файлов
Vim включает в себя diff-редактор (программа, которая отображает различия между двумя файлами и позволяет удобно их объединять). Используйте vimdiff для этого — просто укажите ей пару файлов: vimdiff файл1 файл2
. Ниже приведен список команд vimdiff. Основы по использованию Vim читайте в разделе #Использование.
Действие | Горячая клавиша |
---|---|
следующие изменение | ]c
|
предыдущее изменение | [c
|
diff obtain | do
|
diff put | dp
|
развернуть блок | zo
|
свернуть блок | zc
|
перечитать файлы | :diffupdate
|
переключить окна | Ctrl+w+w
|
Советы и рекомендации
Здесь представлены некоторые советы и рекомендации, которые позволят вам эффективнее работать в Vim и помогут в выполнении некоторых специфичных задач.
Нумерация строк
-
:set number
— обычная нумерация строк. -
:set relativenumber
— относительная нумерация строк. -
:номер_строки
— переход на строку по номеру.
Проверка орфографии
Проверку орфографии в Vim можно включить с помощью:
set spell
По умолчанию установлен только английский словарь. Другие словари можно найти в официальных репозиториях по запросу vim-spell
. Еще больше словарей можно найти в FTP-архиве Vim. Словари необходимо поместить в каталог для словарей — ~/.vim/spell/
. Включить словарь можно командой :setlocal spell spelllang=ru_yo
(заменив ru_yo
на имя нужного словаря).
Действие | Команда |
---|---|
следующая ошибка | ]s
|
предыдущая ошибка | [s
|
предложения для исправления | z=
|
добавить правильное написание | zg
|
добавить правильное написание (на сеанс) | zG
|
добавить неправильное написание | zw
|
добавить неправильное написание (на сеанс) | zW
|
повторить проверку орфографии во всем файле | :spellr
|
Сохранение позиции курсора
Если вы хотите, чтобы курсор возвращался в прежнее положение после открытия файла, добавьте следующее в ~/.vimrc
:
augroup resCur autocmd! autocmd BufReadPost * call setpos(".", getpos("'\"")) augroup END
Запуск Vim по команде vi
Создайте псевдоним для 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 файл
.
Пустое пространство в нижней части окон gVim
Когда используется оконный менеджер, настроенный на игнорирование размеров окна, gVim заполняет неиспользованные области окна стандартным фоновым цветом темы GTK.
Решение заключается в регулировании количества места, которое будет резервировать в нижней части окна gVim. Поместите следующую строку в ~/.vimrc
:
set guiheadroom=0
Плагины
Плагины могут помочь повысить эффективность вашей работы в Vim. Они могут менять интерфейс Vim, добавлять новые команды, поддержку завершения кода, интеграцию других программ и утилит с Vim, поддержку дополнительных языков и многое другое.
Установка
Используя менеджер плагинов
Менеджер плагинов позволяет устанавливать плагины и управлять ими одинаковым образом независимо от того, на какой системе вы запускаете Vim. Он представляет собой специальный плагин, который выполняет роль пакетного менеджера для других плагинов.
- Vundle — в настоящее время наиболее популярный менеджер плагинов Vim.
- Vim-plug - минималистичный менеджер плагинов для Vim, который имеет много особенностей, например, загрузка плагинов по запросу и параллельное обновление.
- pathogen.vim — простой плагин для управления переменной runtimepath.
Из репозиториев 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
Создайте файл, который содержит список файлов для индексации (cscope может обрабатывать множество языков, но для примера мы возьмем файлы на Си/Си++ с расширениями .c, .cpp и .h):
cd /путь/к/каталогу/проекта find . -type f -print | grep -E '\.(c(pp)?|h)$' > cscope.files
Создание файлы базы данных, которые cscope будет читать:
cscope -bq
Горячие клавиши по умолчанию:
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-taglist.
Полезные опции можно записать в ~/.vimrc
:
let Tlist_Compact_Format = 1 let Tlist_GainFocus_On_ToggleOpen = 1 let Tlist_Close_On_Select = 1 nnoremap <C-l> :TlistToggle<CR>
Смотрите также
Официальные ресурсы
Руководства
- vim Tutorial and Primer
- vi Tutorial and Reference Guide
- Graphical vi-Vim Cheat Sheet and Tutorial
- Vim Introduction and Tutorial
- Open Vim - Коллекция средств обучения Vim.
- Learn Vim Progressively
- Learning Vim in 2014
Видео
- Vimcasts - Скринкаст в формате .ogg.
- Vim Tutorial Videos - От основ к продвинутым темам.
Игры
Примеры конфигурации
- nion
- Детальная конфигурация от Amir Salihefendic
- Bart Trojanowski
- Дистрибьютор Vim Steve Francia
- Конфигурация Vim W4RH4W
- vimrc/colorscheme от askapache
- Базовый vimrc
Другие
- HOWTO Vim - статья Gentoo Wiki на которой базировалась эта статья (автор не известен).
- Vivify - Редактор Color.Scheme для Vim.
- Usevim - Часто обновляемый блог о плагинах, хитростях и т.д.
- Vim Awesome - Сайт, который сортирует плагины Vim по популярности среди пользователей GitHub.
- Basic Vim Tips - Справочная таблица Vim, в первую очередь ориентированная на начинающих.
- Vim colorscheme tailoring — переопределение установленной цветовой схемы на время или сделать ее постоянной.