Vi
Недописанный конспект рассказа в прошлом году
План
- орг: следующее занятие 20-го
- vi:
- историческая справка
Основная идея: текст больше правят, чем пишут (ср. программы больше читают, чем пишут); правка – поиск места в тексте и замена (т.е. главное, чтобы были удобные команды навигации и удаления текста). vi/vim нужно _учить_. vi/vim – вместо far editor и вместо idle, и для того, чтобы поправить на удалённой машине текст, а не замена ворду.
- режимы: normal, insert, command
основной режим: normal; переход в command :, обратно ESC
самые главные команды в command mode: :q, :wq, :wqa, :w, :qa, ... (:[w][q][a][!]), :h
хелпы: :cmd, 'option', normalcmd, ^D, ^I
- перемещение курсора в normal mode:
h, j, k, l – стрелки (полезное, vim-only, gj, gk; :map <Up> gk| :map <Down> gj)
w, e, b, W, E, B – перемещение по словам
/, ?, n, N – поиск регулярного выражения в тексте
t, T, f, F – поиск буквы в текущей строке
0, ^, $ – начало, начало, конец строки
переход из normal -> insert: i, I, a, A
"nesting commands": <cmd><motion>
- d, c, y
- dw, dl, dt5 d/hello
особые случаи: dd, cc, yy – применить к текущей строке целиком
- полезные сокращения: x = dl; s = cl, D = d$, C = c$, Y = yy
Copy & paste:
- p, P
- посимвольный и построчный режим
регистры: "0 .. "9 – история, "a .. "z + "A .. "Z – общего назначения
- e.g: "addpp (сделать две копии текущей строки)
- Префикс повтора:
- 10e
- d10e = 10de
10i*<ESC>
- Ещё команды перемещения: gg, G (e.g. 100G = 100gg; gg = 1G)
- Больше режимов:
r – заменить один символ (e.g. 10r*)
R – перейти в режим REPLACE
vim-only: v – режим выделения (посимвольно); (e.g vjd – не то же, что и dj)
vim-only: V – режим выделения (построчно); (e.g. Vjd – то же, что и dj)
vim-only: <C-v> – режим вертикального выделения; приятные мелочи:
$ – не то же, что и 10000l
<C-v>...I, <C-v>...A – приписать текст (перед началом / после конца) выделения в каждой выделенной строке
Search & replace:
:<range><cmd><args>
<range> = пусто или . – текущая строка, % – весь файл, N1,N2 – от строки N1 до N2 включительно;
v...: – задаёт <range> "<,">
<count>: – задаёт <range> .,.+<count-1>
<cmd> – их тысячи; нам интересна: s
:%s/regexp/replace/ – заменить в каждой строке первое вхождение regexp на replace
флаги: g – заменять все вхождения, c (confirm) – спрашивать перед каждой заменой, есть ещё флаги
e.g: :%s/hello/world/ <C-v>$jjA+<ESC> – синоним 3:s/$/+/
- Макросы
- Кодировки
- Modeline
- vimrc
- Пробелы/табуляции (se list)
- Переменные (полезные: nu sw ts et wrap tw showcmd enc fenc tenc fencs backspace=indent ai ft ff langmap)
- map, imap, ...
readline(3) и ~/.inputrc. echo set editing-mode vi > ~/.inputrc
- работа с несколькими файлами
Упражнения
- На любом компьютере, где установлен vim, запустите vimtutor и выполните все его упражнения.
Напишите с помощью vim текст песенки "99 bottles of beer on the wall".