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 somefile
то вы увидите пустой документ (при условии что somefile не существует. Но если он существует, вы увидите его содержимое). Вы будете не в состоянии редактировать файл - вы в Командном режиме. В этом режиме вы отдаете команды Vim с помощью клавиатуры.
Вы пишете текст (он вставляется перед курсором) с помощью команды i
. I
(i в верхнем регистре) вставляет текст в начало строки. Чтобы добавить текст после курсора используют a
. A
тоже самое только курсор перемещается к концу строки. И вы вернетесь в командный режим в любое время, нажав клавишу Esc
.
Перемещение
В Vim, вы можете перемещать курсор с помощью клавиш со стрелками, но это не путь Vim (Vim way). Вам придется перемещать вашу правую руку полностью от стандартного положения набора текста полностью к клавишам со стрелками, а затем обратно. Не весело.
В Vim, вы можете переместиться вниз нажав j
. Вы можете помнить об этом, потому что “j“ опущена вниз. Вы перемещаете курсор назад нажимая k
. Влево h
(слева от “j“} и вправо это l
(L в нижнем регистре).
^
переместит курсор в начало строки, а $
переместит его в конец.
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
.
Дополнительные команды
-
dd
удалит текущую строку (используйтеddp
для быстрой смены строки) -
cc
удалит текущую строку и переведет вас в режим замены -
o
создаст новую строку ниже текущей и переведет вас в режим замены,O
создаст новую строку выше текущей и переведет вас в режим замены -
yy
скопирует всю строку в буфер -
*
подсветит текущее слово и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
Переход на новую строку с помощью клавиш со стрелками
По умолчанию, нажимая ←
в начале линии или нажимая →
в конце линии, курсору не позволят перейти на прошлую или следующую строку.
Это может быть изменено с помощью добавления строки 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
|
Хитрости
Решение определенных задач пользователя.
Нумерация строк
-
:set number
нумерация строк. -
:set relativenumber
относительная нумерация строк. -
:<номер строки>
чтобы перепрыгнуть на определенную строку.
Проверка орфографии
Проверку орфографии в Vim можно включить с помощью:
set spell
По умолчанию установлен только английский словарь. Больше можно найти в официальных репозиториях, используя vim-spell
для поиска. Дополнительные словари могут быть найдены в FTP архиве Vim. ~/.vim/spell/
папка для словарей. Включить специфичный словарь можно с помощью :setlocal spell spelllang=LL
.
Действие | Команда |
---|---|
следующая ошибка | ]s
|
предыдущая ошибка | [s
|
орфографические предложения | z=
|
добавить правильное написание | zg
|
добавить правильное написание на сессию | zG
|
добавить не правильное написание | zw
|
добавить не правильное написание на сессию | zW
|
повторить проверку орфографии во всем файле | :spellr
|
Сохранение позиции курсора
Если вы хотите чтобы курсор возвращался в прежнее положение после открытия файла, добавьте следующее в ~/.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
Создать файл, который содержит файлы, которые вы хотите чтобы cscope индексировал (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: найти файлы #включающие этот файл 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.
Ресурсы
Официальные
Руководства
- 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
Другие
- HOWTO Vim - статья Gentoo Wiki на которой базировалась эта статья (автор не известен).
- Vivify - Редактор Color.Scheme для Vim.
- Usevim - Часто обновляемый блог о плагинах, хитростях и т.д.
- Vim Awesome - Сайт, который сортирует плагины Vim по популярности среди пользователей GitHub.
- Basic Vim Tips - Справочная таблица Vim, в первую очередь ориентированная на начинающих.