====== Горячие клавиши в vim ====== Файл настройки: ~/.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: История команд . Повторение последней команды x — удалить символ под курсором (<число>x удаляет указанное число символов начиная с того который находится под курсором); X — удалить символ влево (удалить символ перед курсором); d — используется совместно с командами перемещения. Удаляет символы с текущего положения курсора до положения после ввода команды перемещения. Пример: dw - удаляет символы с текущего до конца слова. включая пробел после слова, чтобы удалить символы до конца слова, но оставить пробел используется команда de, dE - удаляет символы с текущего до конца слова, включая символы пунктуации, но оставляет пробел после слова, diw - удаляет слово под курсором, dd — удалить текущую строку (вырезать); d<число>d или <число>dd — стирание числа строк начиная с текущей; db - удаляет символы с текущего до начала слова (удаление в обратном направлении); d0 - удаление символов с начала строки до текущего положения курсора; d$ или D - удаление символов с текущего положения курсора до конца строки; с — команда аналогичная d, но после удаление переходит в режим ввода; сс - команда удаляет текущую строку и переходит в режим ввода; C - удаляет текст с текущего положения курсора до конца строки, аналогична команде с$ (где $ - символ конца строки); yy (также Y) — копирование текущей строки в буфер; y<число>y — копирование числа строк начиная с текущей в буфер; p — вставка содержимого буфера под курсором. Поскольку в vim девять ячеек буфера удаления. Можно вставить не только последнее удаление, но и удаления сделанные ранее. Например "4p" вставит под курсор содержимое четвертого удаления начиная с последнего. Также чтобы поменять местами два символа можно использовать комбинацию команд "удалить" -x (удаление в буфер) и "вставить" - p (вставить из буфера). Таким образом, поставив курсор на первую букву из двух которые необходимо поменять местами и нажав комбинацию клавиш xp мы совершим необходимые действия; P — вставка содержимого буфера перед курсором; J — слияние текущей строки со следующей. Числовой аргумент перед командой показывает сколько следующих линий необходимо объединить с текущей. Например 2J объединить две следующие строки с текущей, на которой расположен курсор. [[https://eax.me/vim-commands/]]