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
- до шаблона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
Метки(никогда не пользовался)
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