vim-practice
Новые заметки по командам vim
На данный момент буду накидывать сюда примеры, которые не видел ранее. Когда-нибудь отсортирую их либо внесу в основную статью.
Text object selection ( :help object-select )
Можем действовать на объект в тексте внутри которого сейчас находится курсор. Начинается в Visual mode или после оператора (d,c …),
потом i
(без пробелов вокруг) или a
(с пробелами), а в конце команда передвижения
daw
- удалить слово
vi"
- выделить то, что в "
vit
- выделить tag block
w
- word
s
- sentence(предложение)
p
- paragraph
Выделить блок текста ограниченный чем-то (i-внутри скобок, a-вместе со скобками)
{B}(b)[]<>t''...
- разные блоки внутри скобок, кавычек
{123}
(123)
Operators (:help operator)
c | change |
d | delete |
y | yank into register (does not change the text) |
~ | swap case (only if ‘tildeop’ is set) |
g~ | g~ swap case |
gu | gu make lowercase |
gU | gU make uppercase |
! | filter through an external program |
= | filter through ‘equalprg’ or C-indenting if empty |
gq | gq text formatting |
g? | g? ROT13 encoding |
> | shift right |
< | shift left |
zf | zf define a fold |
g@ | g@ call function set with the ‘operatorfunc’ option |
Insert Mode
Вставка
Esc
or Ctrl-[
- выйти из Insert mode
Cntrl-r0
- вставка из 0 регистра (стандартный)
Cntrl-r=6*20<CR>
- вставка значения выражения 6*20
Cntrl-v<code>
- вставка unicode символа(065,u00bf)
Cntrl-k{char1}{char2}
- вставка unicode символа из диграфа (:help digraph-table
)
В Normal mode ga
на символе даёт код символа
ث
- <ﺙ> 1579, Hex 062b, Oct 3053, Digr tkﺙ>
Особенности
Cntrl-w
- удалить слово
Cntrl-u
- удалить до начала строки
Visual mode gists
Esc
or Ctrl-[
- выйти из Visual mode(такой же, как Insert)
gv
- повторить последнее выделение
Также во время выделения работают операторы.
Vr-
- заменить все символы в строке на -
o
- переход курсора наверх выделения, либо вниз выделения
:’<,’>s//bar/g
- заменить все вхождения последнего поиска на bar
в выделенной области
Ctrl-r <name register>
- вставить в командную строку текст из регистра
Например:
Ctrl-R + \
- последнее выделение при поиске
Очерёдность:
-
- поиск
cw
- заменить :%s// /g - вставить последнюю замену с последнего поиска
- поиск
cw
Полезные регистры
- The unnamed register “” - все операции копирования, удаления
- 10 numbered registers “0 to “9 - те же самые операции, но в порядке последнем
- The small delete register “- только первая строка копирования
- 26 named registers “a to “z or “A to “Z - в эти можно без проблем писать, что захочешь
- Three read-only registers “: - last command “. - last inserted line “% - name of current file
- Alternate buffer register “# - регистр для плагинов
- The expression register “= - не разобрался
- The selection registers “* and “+ - регистры для копирования из системы
- The black hole register “_ - в него можно всё удалять и другие регистры не будут задействованы
- Last search pattern register “/
Ex-commands
Cntrl-w Cntrl-w
- вставить в командную строку слово под курсором
Cntrl-w Cntrl-a
- вставить в командную строку WORD под курсором
q:
- история команд, которую можно редактировать и запускать из неё
%normal A;
- вызвать normal-команду для каждой строки
Для справки: | Command | Effect |:[range]delete [x] |Delete specified lines [into register x] |:[range]yank [x] |Yank specified lines [into register x] |:[line]put [x] |Put the text from register x after the specified line |:[range]copy {address}| Copy the specified lines to below the line specified by {address} |:[range]move {address}| Move the specified lines to below the line specified by {address} |:[range]join | Join the specified lines |:[range]normal {commands} | Execute Normal mode {commands} on each specified line |:[range]substitute/{pattern}/{string}/[flags]| Replace occurrences of {pattern} with {string} on each specified line |:[range]global/{pattern}/[cmd] | Execute the Ex command [cmd] on all specified lines where the {pattern} matches
Windows
<C-w>s
or :sp[lit] {file}
- разделить окно горизонтально
<C-w>v
or :vsp[lit] {file}
- разделить окно вертикально
<C-w>w
- ходить по окнам циклически
<C-w>[hjkl]
- перейти на окно в зависимости от положения
<C-w>с
or :cl[ose]
- закрыть текущее окно
<C-w>o
or :on[ly]
- закрыть все окна кроме текущего
<C-w>=
- сравнять размеры всех окон
<C-w>_
- максимизировать текущее окно снизу вверх
<C-w>|
- максимизировать текущее окно слева направо
[N]<C-w>_
- сделать текущее окно равным N строк
[N]<C-w>|
- сделать текущее окно равным N колонок
Кодировка
:e ++enc=cp1251
- поменять кодировку
Tabs(вкладки)
tabe[edit] {filename}
- открыть файл во вкладке
<C-w>T
- переместить текущее окно в свою новую вкладку
tabc[lose]
- закрыть вкладку
tabo[nlye]
- закрыть вкладки кроме текущей
[N]gt
- переместится на N владку
[N]gt
- переместится на следующую владку
[N]gt
- переместится на предыдущую владку
Auto-marks
Vimscript
Пока примеры функций, которые хочется использовать в своих скриптах
function! test_write_tab()
let full_cur_line = getline(line('.'))
let target_pattern = '\(.*\)[^(]*\(.*\)'
let target_line_num = search(target_pattern)
finded = split(matchstr(getline(line('.')), '(.*)[^(]*(.*)'), '==')
execute(':tabprevious')
setbufline(1,line('.'), '123'.'132')
append(line('.'), ['123:', '\n'.'132'])
execute(':tabprevious')
Slow Vim
:syntime on
- включить сбор статистики по скорости работы
:syntime report
- показать собранную статистику
Vim session
Create:
:mks[!] ~/.vim/sessions/<file>
:source ~/.vim/sessions/article.vim
Open:
:source ~/.vim/sessions/article.vim
#vim