Файл настройки: ~/.vimrc Можно редактировать файлы через сеть, например :e ://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 вставить из буфера обмена d удалить n+1 строку y скопировать n+1 строку ESC перейти в режим просмотра DEL удалить следующий символ : перейти на строку #n % перейти к парной скобке :e **/filename.c редактировать файл (с поиском по имени) :w [fname] записать изменения :wa сохранить изменения во всех файлах :q выйти из редактора :q! выйти из редактора, не сохраняя изменения :color выбор цветовой схемы. цветвые схемы: /usr/local/share/vim/vim72/colors/*.vim :pwd текущий каталог :cd [path] перейти в другой каталог :!команда выполнить команду - man, git, и так далее стрелочками веерх и вниз можно автодополнять команды и искать по истории CTR+p или CTR+n автоматическое дополнение текста (в режиме редактирования) CTR+r,=, вставить выражение, например 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 предыдущий таб 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: История команд . Повторение последней команды ```