Это старая версия (1.33) РедакторVim.

Содержание

Work in progress


TODO статьи:
	* добавить раздел про табы (tabe);
	* описание буферов и работы с ними (:ls/:b/);
	* ctags;
	* разделение экрана на несколько областей :vsplit, :split, ...
	* полезные плагины.

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

Текущий режим отображается внизу экрана, если там находится имя файла или пустая строка - редактор в командном режиме, в режиме вставки отображается строка -- INSERT --, в режиме выделения - -- VISUAL --.

Hello world

В качестве примера создадим файл hello.txt содержащий строчку 'Hello, world!'

 $ vim hello.txt

После этого в открытом редакторе набираем

 iHello, world!<ESC>:wq

Теперь по порядку о том, что мы сделали:

  1. i - команда перехода в режим вставки (После нажатия внизу появляется строка -- INSERT --);
  2. Hello,world! - в режиме вставки строка печатается на экран;
  3. <ESC> - Нажатие клавиши Escape выводит vim из режима вставки;
  4. :wq - команда для сохранения файла и выхода из текстового редактора.

По умолчанию редактор находится в командном режиме.

Перемещение курсора

Для перемещения курсора по тексту в командном режиме используются клавиши hjkl: h - переместить курсор влево, j переместить курсор вниз, k - переместить курсор вверх, l - переместить курсор вправо. Использовать hjkl для перемещения гораздо удобнее чем тянуть руку к мышке или клавишам со стрелками (при слепом десятипальцевом методе набора ваши пальцы уже лежат на клавишах jkl), в нужный момент вы просто нажимаете <ESC> и перемещаете курсор в выбранную позицию.

Базовые команды

Для удаления выбранного символа в командном режиме передвиньте курсор к символу и нажмите x.

Для того чтобы отменить сделанные изменения в командном режиме нажмите u (аналог <ctrl>+z).

Для того чтобы вернуть отменённые изменения в командном режиме нажмите <ctrl>+r

Помимо базовых команд, о которых было сказано выше, vim поддерживает множество других, позволяет комбинировать уже существующие или создавать свои. Более того, перед большинством команд можно набрать число, определяющее сколько раз команда будет выполнена, например для удаления четырёх символов вместо четырёх нажатий на x можно набрать команду 4x

Пара слов о командном режиме

Можно относиться к командам vim как к предложениям.

Есть глаголы (например f - find, d - delete, g - go), есть существительные (например w - word, буквы, числа).

Примеры составления предложений:

  • Delete till find 'b' (удалить всё до символа 'b') - dtfb
  • Mark from there to 22 line (выделить всё с текущего символа до 22 строки) - vg22g

Соответственно чем больше вы знаете "слов", тем более сложные и полезные "предложения" вы сможете составлять. Вторая часть статьи - краткий конспект различных возможностей и команд vim.

 

1. Режимы Vim

Помимо описанных выше режимов работы (вставка, командный режим) vim поддерживает множество других. Более того, переход может быть выполнен несколькими способами

Командный режим

Режим по умолчанию. Из него осуществляется переход в другие режимы и выполнение команд.

Клавиша перехода - <ESC>.

Все команды из разделов 2 - 10 выполняются из этого режима.

Режим ввода

Клавиши перехода:

* i
ввод с текущего символа;
  • a - ввод со следующего символа;
  • o - перейти в режим ввода с новой строки под курсором;
  • O - перейти в режим ввода с новой строки над курсором;
  • I - переместиться в начало строки и перейти в режим ввода;
  • A - переместиться в конец строки и перейти в режим ввода;

Режим выделения

Клавиши перехода:

  • v - посимвольное выделение;
  • V - построчное выделение.

Режим замены

Клавиша перехода - R.

2. Работа с файлами и сессиями

:mksession - создать файл сессии (в файл Session.vim сохраняется информация о настройках и всех открытых файлах и буферах);

source Session.vim - загрузить файл сессии (все настройки и открытые в прошлый раз окна восстанавливаются);

:eFILE - открывает FILE на редактирование;

:w\FILE - записывает сделанные изменения в открытый файл или FILE, если он указан;

:q - выход из vim. При :q! выход без записи сделанных изменений;

РЕМАРКА: - можно смешивать несколько команд в одну. Например - :wq

3. Перемещение

Перемещение курсора:

влево / вниз / вверх / вправо
 h    / j    / k     / l

РЕМАРКА: Удобство в том, что при такой раскладке пальцы всегда лежат на большинстве нужных клавиш, и не нужно перемещать руку от букв к клавишам стрелок.

^ - курсор в начало строки;

$ - курсор в конец строки;

w - курсор в начало следующего слова;

b - курсор в начало предыдущего слова;

{NUM}gg - переход на {NUM} строку;

G - переход в конец файла;

ctrl + y - экран на 1 строку вверх;

ctrl + e - экран на 1 строку вниз;

ctrl + u - экран на 1/2 страницы вверх;

ctrl + d - экран на 1/2 страницы вниз;

ctrl + b - экран на страницу вверх;

ctrl + u - экран на страницу вверх;

4. Отмена действий

u - отменяет предыдущее действие. Может применяться несколько раз. Аналог комбинации ctrl + z;

ctrl + r отмена отмены предыдущего действия. Аналог комбинации ctrl + shift + z.

5. Поиск

/{regex} - поиск регулярного выражения {regex} в текущем файле от курсора к концу файла;

/{regex} - поиск регулярного выражения {regex} в текущем файле от курсора к началу файла;

n - найти следующее вхождение;

N - найти предыдущее вхождение;

f{letter} или F{letter} - перемещает курсор на следующую (или предыдущую если F) букву {letter} в текущей строке;

t{letter} или T{letter} - перемещает курсор за один символ до следующей (или предыдущей если T) буквы {letter} в текущей строке;

6. Редактирование

{NUM}dd - удаление {NUM} строк;

{NUM}cc - аналог dd, но после удаления переворит редактор в режим ввода;

{NUM}yy копирование {NUM} строк в буфер обмена;

p - вставка из буфера обмена после позиции курсора;

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

x - удаление символа под курсором.

7. Вызов внешних команд

:!cmd - вызывает shell команду cmd для обработки переданных данных. Если данных не передано, показывает вывод команды на экран.

Пример:

:!ls - показывает файлы в текущей директории

:%wc -w - считает количество слов в файле

Делаем vim hex-редактором:

%!xxd - конвертирует файл в хекс представление

%!xxd -r - конвертирует обратно

8. Прочие полезные команды

:E - Открывает меню выбора файла;

:setlocal - показывает текущие локальные переменные

9. Путешествие по тегам

Файл тегов можно создать с помощью команды

ctags -R .

ctrl + ] - перейти к первому определению тега;

ctrl + g - то же что и ctrl + ], но показывает меню выбора, если определений несколько;

ctrl + t - вернуться обратно.

10. Файл настроек vimrc

При запуске редактор считывает настройки, сохранённые в файле ~/.vimrc. Те же команды можно установить для текущей сессии vim в командном режиме после двоеточния (Пример: :set nu)

Для установки опций используется ключевое слово set, причём если мы хотим отключить опцию, то перед её именем мы пишем no

Пример:

set nu - включает нумерацию строк vim;

set nonu - выключает нумерацию;

set hls - highlight search, подсвечивает искомые слова

set ic - ignore case, игнорирует регистр букв при поиске

syntax on - включает подсветку синтаксиса

11. Справка

Vim содержит довольно полную документацию, которой можно воспользоваться в любой момент. Для её просмотра необходимо использовать команду :help. Для получения справки по интересующей команде достаточно набрать :help commandname в командном режиме. По оглавлению можно перемещаться с помощью горячих клавиш из раздела "Путешествие по тегам"

12. Полезные дополнения vimrc

Работа с файлами в windows(cp1251) кодировке

set fileencodings=cp1251,utf-8
if has("x11") == 0
  set enc=cp1251
endif

Добавление привычных комбинаций <ctrl>+c, ctrl+v, ctrl+a

function! CopyAll()
  let n = line('.')
  normal gg"+yG
  exec n
endfunction

vmap <C-c> "+y
map <C-v> <esc>"+gP
map <C-a> <esc>:call CopyAll()<cr>

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

.LP
set langmap=йq ,цw ,уe ,кr ,еt ,нy ,гu ,шi ,щo ,зp ,фa ,ыs ,вd ,аf,пg ,рh ,оj ,лk ,дl ,яz ,чx ,сc ,мv ,иb ,тn ,ьm ,ЙQ ,ЦW ,УE ,КR ,ЕT ,НY ,ГU ,ШI ,ЩO ,ЗP ,ФA ,ЫS ,ВD ,АF ,ПG ,РH ,ОJ ,ЛK ,ДL ,ЯZ ,ЧX ,СC ,МV ,ИB ,ТN ,ЬM ,х[[ ,Х{ ,ъ]] ,ж\\; ,Ж: ,э' ,Э\\" ,б\\, ,Б< ,ю. ,Ю>

13. Плагины

Для упрощения работы в VIM в интернете можно найти множество плагинов. Их установка довольно проста (обычно нужно просто поместить файлы в папку ~/.vim/).

Из них можно выделить

omnicppcomplete

Плагин для автодополнения имён структур, функций. Информацию о которых получается из файла тегов, который можно сгенерировать с помощью утилиты ctags.

snipmate

Плагин, содержащий в себе снипеты (короткие часто используемые куски программ, например определение функции main) для многих языков программирования. Добавить свои снипеты или изменить существующие можно в файлах .vim/snippets/*

NERDtree

Плагин отображает дерево каталогов начиная с выбранного корня. Довольно удобно для просмотра больших проектов.

14. Используемые источники

  1. Vim — Викиучебник / . — 2015. — http://ru.wikibooks.....
  2. Oualline, S. Vi iMproved (VIM) / S. Oualline. — New Riders.
  3. Orenstein, B. Write code faster: expert-level vim (Railsberry 2012) / B. Orenstein. — http://www.youtube.c....