1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
|
### Перемещение по экрану ###
`H ( gg )` - в начало экрана
`M` - в середину экрана
`L ( G )` - в конец экрана
`(` - к предыдущему предложению
`)` - к следующему предложению
`{` - к предыдущему параграфу
`}` - к следующему параграфу
### Перемещение по словам в строк ###
В командах `b, e, B, E` - переход зависит от положения курсора в слове.
`w` - в начало следующего слова
`W` - в начало следующего слова после пробела
`b` - в начало текущего/предыдущего слова (beginning)
`B` - в начало текущего/предыдущего слова перед пробелом
`e` - в конец текущего/следующего слова (end)
`E` - в конец текущего/следующего слова после пробела
### Перемещение по строкe ###
`0`, `Home` - к началу строки
`$`, `End` - к концу строки
`_`, `^` - к первому не пустому символу в строке
`g_` - к последнему не пустому символу в строке
`-` - к первому не пустому символу в строке сверху
`+` - к первому не пустому символу в строке снизу
`gg` - к первой строке
`G` - к последней строке
`ngg` - к строке под номером n (например: 45gg)
`nG` - к строке под номером n (аналог ngg)
### Перемещение, по символам в строке ###
`%` - к парной скобке вперед по тексту строки `()` `{}` `[]`
`f` и `X` - к следующему символу `X` в строке (`X` - любой символ)
`F` и `X` - к следующему символу `X` в строке (обратное направление)
`t` и `X` - перед символом `X` в строке (`till`)
`T` и `X` - перед символом `X` в строке (обратное направление) (`till`)
`;` - повторить переход в прямом направлении
`,` - повторить переход в обратном направлении
### Поиск в документе ###
- `/Выражение` - поиск текста вперед по документу от курсора
- `?Выражение` - поиск текста назад по документу от курсора
`\c` перед `Выражением` - совершит поиск без учета регистра
В режиме поиска искомое слово будет подсвечено.
Отключить подсветку можно через косоль:
```
:nohlsearch
```
или поискать несуществующую ерунду ( `/asdfasd`)
`,` и `пробел` - Отключить подсветку поискового слова
## Ввод текста ###
`insert mode` - режим редактирования
`a` - добавить текст после курсора
`i` - добавить текст до курсора
`A` - добавить текст в конце строки
`I` - добавить текст в начале строки
`O` - добавить строку сверху курсора
`o` - добавить строку снизу курсора
Все эти команды переключают vim в режим редактирования.
`Esc` - _выход_ из режима редактирования
## Выделение ###
`visual mode` - режим выделения текста
`v` - посимвольное выделение текста (visual)
`V` - построчное выделение текста `v + hjkl` - выделение текста `SHIFT + v` - выделить строку `CTR + v` - выделение прямоугольника `Esc` - _выход_ из режима выделения
### Продвинутое выделение ###
`vip` - выделить параграф
`viw` - выделить слово
`Shift+v` или `0v$` - выделить строку
`^v$` - выделить строку, начиная с первого непробельного символа
`vi(` - выделить всё между ближайшими круглыми скобками (аналогично `vi\[` и `vi\{` для квадратных и фигурных скобок)
`va(` - выделить всё между ближайшими круглыми скобками, включая сами скобки
`v2j` - выделить на две строки вниз
`dip` - вырезать параграф
### Копирование и вставка ###
`y`[направление] - копировать символ под курсором по направлению (h, j, k, l, $, 0 и т.п.)
`yy` - копировать строку
`"*y` - копировать в системный буфер обмена для вставки в другое приложение (например браузер)
`p` - вставить после курсора (paste)
`P` - вставить до курсора
`gp` - вставить после курсора и переместить курсор на один символ вправо
`gP` - вставить до курсора и переместить курсор на один символ влево
### Удаление (вырезка) текста ###
`x`, `DEL` - удалить (вырезать) символ под курсором
`X` - удалить (вырезать) символ до курсора (аналог backspace)
`d`[направление] - удалить (вырезать) символы по направлению (h, j, k, l, $, 0 и т.п.)
`dd` - удалить (вырезать) строку
`D` - удалить (вырезать) символы от курсора до конца строки
### Изменение и замена текста ###
`J` - объединить строку с нижней (join)
`r`[символ] - заменить символ под курсором (replace)
`R` - начать ввод с заменой текста (аналог кнопки insert)
`s` - заменить символ и начать ввод (substitute)
`S` - заменить строку и начать ввод
`c`[направление] - изменить символ по направлению (h, l, e, b и т.п.)
`C` - изменить строку от курсора до конца (change)
`~` - сменить регистр символа под курсором
`gu` - преобразовать в нижний регистр (для изменения - сместите курсор)
`gU` - преобразовать в верхний регистр (для изменения -сместите курсор)
### Отмена действий ###
`u` - отменить действие (undo) `:u\[ndo\]`
`U` - отменить все изменения в строке
`Ctrl+R` - вернуть отменённое действие `:red\[o\]`
`.` - повторить последнее изменение
### Нумерация строк ###
`:set number` включить нумерацию строк
`:set nonumber` отключить нумерацию строк
### Радактирование нескольких файлов ###
Я считаю, что наиболее удобный способ редактирования нескольких файлов - использование вкладок.
Вы можете открыть несколько файлов на отдельных вкладках через командную строку, например, так:
```
vim -p file1.txt file2.txt
```
Или, если у вас уже открыт vim, вы можете открыть новый файл на новой вкладке, например:
```
:tabe file2.txt
```
Открыв вкладки, используйте `gt` для просмотра следующей вкладки и `gT` просмотра предыдущей вкладки.
Вы также можете перейти к первой вкладке с помощью `1gt`, второй вкладке с помощью `2gt` и т. д.
Вы можете закрыть вкладки, используя `:tabc`
Наконец, вы можете переместить текущую вкладку в ту `n`-позицию, `:ntabm` где `n` любое число больше или равно 0.
### Файл настройки: ~/.vimrc ###
```sh
# Можно редактировать файлы через сеть, например
:e <scp|ftp|ftps>://user@host/path/to/the/file.txt
:Ex или :e ./ - файловый менеджер
#== Основы ==
hjkl перемещение в разные стороны
i режим вставки
I добавление в начало строки
a режим добавления
A добавление в конец строки
o добавить строку сразу за текущей
O добавить строку перед текущей
R писать поверх имеющегося текста
u, :u[ndo] отмена предыдущего действия (undo)
CTR-R, :red[o] отмена отмены предыдущего действия (redo)
dd вырезать (удалить) строку
cc удалить и начать редактирование
yy копировать строку
p вставить из буфера обмена
<n>d удалить n+1 строку
<n>y скопировать n+1 строку
ESC перейти в режим просмотра
DEL удалить следующий символ
:<n> перейти на строку #n
% перейти к парной скобке
:e **/filename.c редактировать файл (с поиском по имени)
:w [fname] записать изменения
:wa сохранить изменения во всех файлах
:q выйти из редактора
:q! выйти из редактора, не сохраняя изменения
:color <name> выбор цветовой схемы. цветвые схемы:
/usr/local/share/vim/vim72/colors/*.vim
:pwd текущий каталог
:cd [path] перейти в другой каталог
:!команда выполнить команду - man, git, и так далее
стрелочками веерх и вниз можно автодополнять
команды и искать по истории
CTR+p или CTR+n автоматическое дополнение текста
(в режиме редактирования)
CTR+r,=,<expr> вставить выражение, например 5*2 - 3
(в режиме редактирования)
CTR+u, CTR+d Page Up / Page Down
CTR+y, CTR+e Перемотка вверх/вниз без движения курсора
#== Подсветка синтаксиса ==
:syntax on включить подсветку
:syntax off выключить подсветку (по умолчанию)
#== Перенос строк ==
:set wrap разрешить word wrap (по умолчанию)
:set nowrap запретить word wrap
#== Печать ==
:ha[rdcopy] распечатать документ
:set printoptions=duplex:off отключить двустороннюю печать
#== Сворачивание ==
zc свернуть блок
zo развернуть блок
zM закрыть все блоки
zR открыть все блоки
za инвертирование
zf см :set foldmethod=manual
:set foldenable включить свoрачивание
:set foldmethod=syntax сворачивание на основе синтаксиса
:set foldmethod=indent сворачивание на основе отступов
:set foldmethod=manual выделяем участок с помощью v и говорим zf
:set foldmethod=marker сворачивание на основе маркеров в тексте
:set foldmarker=bigin,end задаем маркеры начала и конца блока
#== Маркеры ==
ma установить локальный маркер a
mB установить глобальный маркер B
`c перейти к локальному маркеру c
`0 вернуться на позицию, на которой закончили
работу при закрытии vim
:marks просмотр маркеров
set viminfo='1000,f1' маркеры пишутся в ~/.viminfo, восстанавливаясь
при следующем запуске vim. маркер хранит
последнюю позицию курсора в файле
#== Сессии ==
mksession file.session сохранить текущую сессию
source file.session восстановить ранее сохраненную сессию
#== Макросы ==
qa записать макрос с именем a
q в режиме записи макроса: закончить запись
@a выполнить макрос с именем a
@@ повторить последний макрос
#== Регистры ==
ayy скопировать строку в регистр a
bdd вырезать строку и поместить в регистр b
С2d вырезать три строки и дописать в конец
регистра C
:reg [name1][name2][...] просмотреть содержимое регистров
#== Выделение ==
v + hjkl выделение текста
SHIFT + v выделить строку
CTR + v выделение прямоугольника
p вставить
y копировать
d удалить
gu к нижнему регистру
gU к верхнему регистру
#== Отступы ==
[#]> сдвинуть выделенное вправо
[#]< сдвинуть выделенное влево
[#]>> сдвинуть строку вправо
[#]<< сдвинуть строку влево
set tabstop=# для табуляции используется # пробелов
set shiftwidth=# в командах отступа используется # пробелов
set [no]expandtab заменять ли табуляцию на соответствующее
число пробелов
#== Поиск и замена в файле ==
/Выражение поиск выражения в файле
\cВыражение поиск без учета регистра
n следующее совпадение
N предыдущее совпадение
:%s/foo/bar/gi замена строк, см http://eax.me/regular-expr/
#== Поиск по всему проекту ==
:vimgrep /EXPR/ **/*.c поиск по регулярному выражению
:copen показать все найденные места
:close скрыть все найденные места
:cn переход к следующему результату
:cp переход к предыдущему результату
#== Нумерация строк ==
:set number включить нумерацию строк
:set nonumber отключить нумерацию строк
#== Работа с вкладками (a.k.a табами) ==
:tabnew [fname] создать таб
:tabs вывести список табов
:tabn следующий таб
:tabp предыдущий таб
<n>gt перейти на таб #n
gt следующий таб
gT предыдущий таб
:tabm +1 переместить таб вперед на одну позицию
:tabm -1 переместить таб назад на одну позицию
:tabm 2 переместить таб на заданную позицию
(нумерация начинается с нуля)
#== Работа с окнами ==
:split горизонтальное разбиение
:vsplit вертикальное разбиение
Ctr+W, затем
с закрыть окно
+- изменение высоты текущего окна
<> изменение ширины текущего окна
= установить равный размер окон
hjkl или стрелочки перемещение между окнами
#== Проверка орфографии ==
mkdir -p ~/.vim/spell
cd ~/.vim/spell
wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.sug
wget http://ftp.vim.org/vim/runtime/spell/ru.koi8-r.spl
wget http://ftp.vim.org/vim/runtime/spell/en.ascii.sug
wget http://ftp.vim.org/vim/runtime/spell/en.ascii.spl
:set spell spelllang=ru,en включить проверку орфографии
:set nospell выключить проверку орфографии
]s следующее слово с ошибкой
[s предыдущее слово с ошибкой
z= замена слова на альтернативу из списка
zg good word
zw wrong word
zG ignore word
#== Работа с кодировкой ==
e ++enc=<имя кодировки> Редактирование файла в ??? кодировке
w ++enc=<имя кодировки> Сохранить файл в новой кодировке
set fileencodings=utf-8,koi8-r Список автоматически определяемых
кодировок в порядке убывания
приоритета
#== Другое ==
:set [no]wildmenu При авто-дополнении в командной строке над
ней выводятся возможные варианты
:set list Отображать табуляцию и переводы строк
q: История команд
. Повторение последней команды
#=======================================================
a - insert после курсора
I - insert в начало текущей строки
o - создает строку ниже и insert
O - создает строку выше и insert
gg - перейти в начало файла
1G - в начало
42G - на 42 строку
G - перейти на последний абзац
0 - первый символ предложения
$ - последний символ предложения
w - перейти в начало следующего слова
W -
b - перейти в начало предыдущего слова
B -
e - перейти в конец текущего слова
E - перейти в конец текущего слова (пробел)
( - перейти к началу текущего предложения
) - перейти к началу следующего предложения
{ - перейти к началу текущего абзаца
} - перейти к началу следующего абзаца
\[\[ - перейти к началу текущего раздела
\]\] - перейти к началу следующего раздела
### Поиск:
/шаблонEnter - поиск вперед
?шаблонEnter - поиск назад
### Замена текста:
cw - до конца слова
c2b - на 2 слова назад
c$ - в конец строки
c0 - в начало строки
### Строки:
cc - полная замена строки
C - замена от текущего положения до конца строки
J - объединить текущую строку и следующую
(. - можно повторить)
### Символы:
r - замена символа и переход в командный режим
R - замена символов от курсора вперед
~ - смена регистра
x - удалить символ под курсором
X - удалить символ перед курсором
50i*ESC - вставка 50 \*
25A\*=ESC - вставка 50 \*=
### Замена текста:
s - замена символа
4s - замена 4 символов
S - замена всей строки
|| замена на && - курсор на первый символ -> 2r&
### Удаление текста:
dw - удалить слово и пробел с курсора и до конца слова
dd - удалить строку целиком
D - удалить строку от курсора до конца строки
de - удаляет только слово с курсора и до конца слова
d$ - удаляет от курсора до конца строки
d0 - удаляет от курсора до начала строки
xp - поменять местами буквы
### Команды:
u - отмена последней операции
ctrl+R - отмена отмены
U - восстановить строку к первоначальному виду
p - вставить после курсора
P - вставить до курсора
y - копировать (yw, y$, y0)
yy - копировать строку целиком (4yy - 4 строки)
. - повтор
### Прокрутка экрана:
^F - вперед
^B - назад
^D - вперед на половину
^U - назад на половину
^E - вперед на строку
^Y - назад на строку
### Положение экрана:
z Enter и z+Enter - прокрутить чтобы текущая строка оказалась в верхней части экрана
z. - прокрутить чтобы текущая строка оказалась в центре экрана
z- - прокрутить чтобы текущая строка оказалась в нижней части экрана
^L - перерисовка экрана
H - первый символ начала верхней строки экрана
M - первый символ начала средней строки экрана
L - первый символ начала нижней строки экрана
nH -
nL -
f - поиск символа
r - замена символа под курсором
R - замена до нажатия ESC
/ - поиск слова вниз документа от текущего положения курсора
? - поиск слова вверх документа от текущего положения курсора
n - следующий в поиске
control + g - имя файла и в какой строке курсор
shift + g - перейти в конец файла
11 + shift + G - вернет к строке когда нажали control + g
m x - закладка на строку с именем x
x - вернуться на строку с закладкой х
v - режим выделения + стрелки
V - выделение всей строки
d - удалить выделение
dw - удалить слово
d$ - удалить до конца строки
D - удалить текст от курсора до конца строки
x - вырезать в буфер
yy - копировать в буфер ?
p - вставить из буфера справа от курсора
P - вставить из буфера слева от курсора
dw - удалить слово
dd - удалить строку
cc - удалить и начать редактирование
u - отменить действие (назад)
U - отменить во всей строке
2dd - удалить 2 строки
cw - заменить слово
Cw - заменить текст до конца строки
q1 - запись макроса (закончить запись = q)
@1 - выполнить макрос 1
```
|