Заметки по командам vim в процессе чтения книги “Vim”.

Основные команды

Передвижение

  • hjkl - передвижение
  • wW bB eE - вперёд[назад][вперёд в конец] на слово, всё кроме пробелов
  • 0 ^ n| $ - первый символ, начало непробельных, n-ый, конец
  • () {} [[]] в начало текущего[следующего] предложения, абзаца, раздела
  • :number numberG - переход на number-строку
  • [count]% - переход на count процент файла
  • '' - место последней правки, перед передвижением
  • m[a-z] 'a - метка, вернуться к метке a

Особые

  • HL - top screen, bottom screen
  • J - соединить следующую строку с текущей
  • K - man page
  • % - перейти дальше к ближайшей скобке, либо перейти к обратной скобке
  • >> << - Убрать/добавить отступ

Переход в insert:

  • iI - insert режим, insert с начала строки
  • aA - append - редактирование после текущего символа, с конца строки
  • oO - добавить строку после, перед текущей перейти в insert
  • sS - subst - удалить символ, строку перейти в insert
  • - change - удалить что-то и перейти в insert, удалить до конца строки

Спец. в insert-режиме

  • CTRL-t, CTRL-d - Убрать/добавить отступ

Остаёмся в текущем режиме:

  • rR - заменить один символ, несколько символов подряд
  • xX - удалить символ, предыдущий символ
  • dD - удалить что-то, удалить до конца строки

Замечания:

  • Все команды можно повторять, ставишь перед ней цифру. При этом если команда, переходит в insert, то повторение срабатывает после выхода из него.
  • Например, можно ввести iao и получить сразу много одинаковых строк. Также с остальными.
  • r - заменить все буквы на одну, но не больше длины строки, c xd - если вводишь больше символов чем встроке, меняет всю строку, что логично.
  • sc - не повторяют строки, но повторяют удаление на несколько сиволов или строк
  • для команд cd двойное нажатие применяет её ко всей строке
  • c и d и y - эти команды работают с любыми перемещениями:
    • cH cL c+ - верх, низ, следующей строки
    • 2c) - второе преложение изменить
    • d/pattern - до шаблона patter
    • c/n - до следующего вхождения
    • cG - конца файла
    • d13G - 13 строки

Вставка и копирование:

  • pP - вставить после, до
  • yY - скопировать что-то, строку ( yy=Y)

Отмена

  • uU - отмена, возврат состояния строки, если курсор не перемещался на другую
  • ^R - отмена отмены

Прокрутка экрана

  • ^f,^d;^b^u - вперёд;назад экран, полэкрана
  • zENTER z. z- - текущая строка вверх, середина, вниз без смещения курсора

Команды из ex

  • :6 - перейти на строку 6

Команды

  • delete d - удалить
  • move m - перемещение
  • copy c t - копировение

Примеры

  • :3,18d - удалить строки
  • :160,224m23 - переместить строки с 160-224 после 23 строки
  • :160,224t23 - скопировать строки с 160-224 после 23 строки
  • := :,= :/pattern/= - номер всех, текущей, найденной строки
  • :[. % $ +-][#p] - текущая, все, последняя, следующие или предыдущие строки вывести
  • :.,.+20d - удалить эту и следующие 20 строк
  • :226,$m.-2 - поместить строки с 226 до конца перед 2 строками текущей
  • :-,+t0 - точки необязательны (копирование трёх строк в начало файла)
  • :100;+5 p - вывести строку после сотой + 5 от неё
  • :1,3d | s/thier/their/ - | в качестве разделителя команд, удаляем строки с 1 по 3 и производим замену в текущей
  • :[230,$]w [>>] new.file - сохранить новую версию [c 230 до конца] в [добавить] другом файле
  • :r filename - считать файл в текущий буфер

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

все команды в v

  • V - выделить строки
  • CTRL-V - выделить блок
  • oO - начать выделять с другой стороны
  • gv - снова выделить тоже самое
  • wW - вперёд на слово
  • a[wsp] - всё слово, предложение, абзац

    plugin vim-surround

  • cs"' - изменить кавычки с " на '
  • ysiw['] - заключить слово в кавычки
  • ds['] - удалить кавычки
  • [VisualM]S['] - заключить в кавычки выделенное

Поиск

  • /? - поиск вперёд, назад
  • nN - перемещение по найденному вперёд, назад
  • * - поиск слова под курсором
  • /\Vtext - поиск текста с экранированием всех особых символов

  • /\(bar\)\@! - поиск следующей строки не содержащей bar
  • :g/pattern/ - вывод только подходящих строк
  • :v[g!]/pattern/ - вывод только неподходящих строк

  • ft[x]FT - найти следующее, предыдущее вхождение символа x в строке
  • ;, - перемещение по найденному вперёд, назад
  • vnoremap // y/<C-R>"<CR> - добавить в vimrc, тогда можно будет с помощью // искать по выделенному тексту (или взять пример с http://vim.wikia.com/wiki/Search_for_visually_selected_text) там можно искать с помощью * по выделенному тексту

Замена

  • ’[%1,2$]s/old/new/gс’ - замена всех строк %, с 1 по 2, последнюю строку
    • g - все вхождения
    • c - с подтверждением
  • g/pattern/s/old/new/g - По pattern ищутся строки, где должна быть произведена замена, а в строках, содержащих pattern, ex должен заменить (s) старые символы (old) на новые (new)

Примеры регулярных выражений

  • :%s/\(That\) or \(this\)/\2 or \1/ - замена порядка двух слов
  • %s/\<child\>/children/g - поиск отдельно-стоящего слова
  • :%s/Yazstremski/&, Carl/ - & -повторение, что было найдено в поиске
  • :1,10s/.*/(&)/ - заключение каждой строки с 1-10 в ()
  • :%&g - повторить последнюю замену по всему тексту
  • & - повторить последнюю замену далее
  • :%s;/user1/tim;/home/tim;g - ; в качестве разделителя
  • :g /SYNTAX/.,/DESCRIPTION/-1 move /PARAMETERS/-1 - поиск строки, содержащей SYNTAX, отметка её как текущей ., потом текст с текущей строки до DESCRIPTION перемещается перед строкой содержащей PARAMETERS
  • :g/^\s*$/d - удалить пустые строки
  • :.,+5s/$/./ - добавить точку в конец следующих шести строк
  • :g/.*/mo0 и :g/^/mo0 - обратить порядок строк в файле
  • :g!/Paid in full/s/$/ Overdue/ - во всех строках не содержащих слова написать в начало
  • :1,10g/^/ 12,17t$ - поместить 10 копий строк с 12 по 17 в конце файла
  • :/^Part 2/,/^Part 3/g /^Chapter/ .+2w >> begin - блок строк от Part 2 до Part 3, в них поиск Chapter и перенаправление вывода в файл

POSIX

[: alnum :] Буквенно-цифровые символы
[: alpha :] Алфавитные символы
[: blank :] Символы пробела и табуляции
[: cntrl :] Управляющие символы
[: digit :] Цифровые символы
[: graph :] Печатаемые и видимые символы (не-пробелы)
[: lower :] Строчные символы
[: print :] Печатаемые символы (включая пробельные)
[: punct :] Знаки препинания
[: space :] Пробельные символы
[: upper :] Прописные символы
[: xdigit :] Шестнадцатеричные цифры

help regexp - в хелпе есть все наборы символов

Буферы

  • "ay - скопировать в буфер a Также с вставить p, удалить в буфер d
  • буферы 0-9 - последние 10 удалений, копирований :registers - посмотреть буферы (0-9,a-z) +* - системные буферы, используется последний использованный(требуется +gvim) guU - перевести выделенное в нижний, верхний регистр

Unix

  • :r !date - считать вывод команды date в буфер
  • ![)}123G...][unix command] - выполнить к выбранным строкам команду unix , можно сначала сделать выделение, потом также ![unix command]

Ctags

  • ctags -R * - создать теги для всего
Keyboard command Action
Ctrl-] Jump to the tag underneath the cursor
CTRL-t Jump back
:ts <tag> <RET> Search for a particular tag
:tn Go to the next definition for the last tag
:tp Go to the previous definition for the last tag
:ts List all of the definitions of the last tag
Ctrl-t Jump back up in the tag stack
g] показать все записи по тегу
gf перейти к файлу под курсором

Окна

  • :[v]split <file> or CTRL-W[svn] - создать гориз, вертик. окно
  • CTRL-W - все команды с окнами
  • hjkl - движение по окнам
  • CTRL-W CTRL-W[P] - циклическое движение по окнам [обратно]
  • RrxX - ротация окон
  • +-<> - изменение размера окон верх, низ, вправо, влево
  • CTRL-W <command> - все команды с тегами, только работают в новом окне

Вкладки

  • CTRL-W gf - открытие файла во вкладке
  • :tabnew <file> , tabclose - новая, закрыть
  • :tabonly - закрыть все остальные вкладки
  • [number]gtT - циклический переход вправо, влево [на номер вкладки]

Свёртки

  • [number]zf[command_move] - свернуть текст [number строк] до команды перемещения, выделение Например:
    • zf% - до следующей скобки
    • zf/pattern - до pattern
  • zoO - раскрыть свёртку, рекурсивно
  • zcC - закрыть свёртку, рекурсивно
  • zAa - переключение состояния свёрток, рекурсивно
  • : set foldmethod=indent - сворачивание по текущему отступу автоматом
  • :set foldlevel=0 - показать только строки с нулевым отступом, остальные свернуть
  • z[rm] - увеличить, уменьшить foldlevel

FZF

{alphanum} Refine the query

  • <C-j> Select previous item from matchlist
  • <C-k> Select next item from matchlist
  • <CR> Open the selected file in the current window
  • <C-x> Open the selected file in a horizontal split
  • <C-v> Open the selected file in a vertical split
  • <C-t> Open the selected file in a new tab page
  • <C-c> Dismiss the fzf picker

Terminal mode

:terminal <C-\><C-n> tnoremap <C-\>

Метки(никогда не пользовался)

  • ma - метка a контекст - последнее изменение
  • 'a \a` - возвращение на метку[контекст], строку с меткой
  • '', \`` - возращение на последнюю метку[контекст], начало строки

Абревиатуры

  • :ab imrc International Materials Research Center - в режиме вставки будет продолжена фраза
  • :map x sequence - макрос в командном режиме
  • CTRL-V + ESC =  - для того чтобы в макрос вставить управляющую команду(ESC,ENTER), надо в режиме вставки нажать CTRL-V и кнопку для команды
  • map e ea - добавление текста при каждом переходе в конец слова
  • map g I/* A */ - закомментить строку как в С
  • @a - в командном режиме запустить команду из буфера

#vim