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, в первую очередь ориентированная на начинающих.