vim-commands
Заметки по командам vim в процессе чтения книги “Vim”.
Основные команды
Передвижение
hjkl- передвижениеwW bB eE- вперёд[назад][вперёд в конец] на слово, всё кроме пробелов0 ^ n| $- первый символ, начало непробельных, n-ый, конец() {} [[]]в начало текущего[следующего] предложения, абзаца, раздела:number numberG- переход на number-строку[count]%- переход на count процент файла''- место последней правки, перед передвижениемm[a-z] 'a- метка, вернуться к меткеa
Особые
HL- top screen, bottom screenJ- соединить следующую строку с текущейK- man page%- перейти дальше к ближайшей скобке, либо перейти к обратной скобке>> <<- Убрать/добавить отступ
Переход в insert:
iI- insert режим, insert с начала строкиaA- append - редактирование после текущего символа, с конца строкиoO- добавить строку после, перед текущей перейти в insertsS- subst - удалить символ, строку перейти в insertcС- change - удалить что-то и перейти в insert, удалить до конца строки
Спец. в insert-режиме
CTRL-t, CTRL-d- Убрать/добавить отступ
Остаёмся в текущем режиме:
rR- заменить один символ, несколько символов подрядxX- удалить символ, предыдущий символdD- удалить что-то, удалить до конца строки
Замечания:
- Все команды можно повторять, ставишь перед ней цифру. При этом если команда, переходит в insert, то повторение срабатывает после выхода из него.
- Например, можно ввести
iaoи получить сразу много одинаковых строк. Также с остальными. r- заменить все буквы на одну, но не больше длины строки, cxd- если вводишь больше символов чем встроке, меняет всю строку, что логично.sc- не повторяют строки, но повторяют удаление на несколько сиволов или строк- для команд
cdдвойное нажатие применяет её ко всей строке c и d и y- эти команды работают с любыми перемещениями:cH cL c+- верх, низ, следующей строки2c)- второе преложение изменитьd/pattern- до шаблонаpatterc/n- до следующего вхожденияcG- конца файлаd13G- 13 строки
Вставка и копирование:
pP- вставить после, доyY- скопировать что-то, строку (yy=Y)
Отмена
uU- отмена, возврат состояния строки, если курсор не перемещался на другую^R- отмена отмены
Прокрутка экрана
^f,^d;^b^u- вперёд;назад экран, полэкранаzENTER z. z-- текущая строка вверх, середина, вниз без смещения курсора
Команды из ex
:6- перейти на строку 6
Команды
deleted- удалитьmovem- перемещениеcopyct- копировение
Примеры
: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
Метки(никогда не пользовался)
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