tag: #N/S/Synthesizing #N/T/Linux #N/T/Tool/Util #N/T/Public 2021-07-18 18:39, [Source](), Related: [[]], Docs: http://vimhelp.appspot.com/vim_faq.txt.html http://vim.wikia.com/wiki/Vim_Tips_Wiki https://eax.me/vim-commands/ https://losst.pro/kak-polzovatsya-tekstovym-redaktorom-vim #T/T/To/Read ## Описание _о чем заметка в 2-3 предложения_ ## Шаблон ```bash ``` ## Примеры: ###### ```bash ``` ### Шпаргалки: Вим моды https://vimhelp.org/intro.txt.html#vim-modes #### Поиск ##### Искать по нескольким паттернам сразу: В режиме поиска '/' пишем \v далее искомые слова разделенные '|' (pipe). `/\v word1|word2|word3` Или в режиме поиска '/' пишем искомые слова, разделяемые: '\|'. `/word1\|word2\|word3` #### Команды ##### Удалить все строки, содержащие шаблон например: удаление всех пустых строк или строк, содержащих только пробелы табы или строки с комментариями: (удалите, /d чтобы отобразить строки, которые команда удалит): `:g/^#|^\s*$|^\s*\t*#|^\s*\t*;$/d` ##### Чтобы удалить все строки, которые не содержат шаблон, используйте: g! Или его эквивалент: v `:g!/^\s*"/d` `:v/^\s*"/d` ##### В следующем примере показано использование \|("или") для удаления всех строк, кроме тех, которые содержат " error" или " warn" или " fail" ( : шаблон справки ): `:v/error\| warn\|fail/d` ##### Добавить что-то в конец каждой строки `:%norm A*` Ключи: `%` = for every line `norm` = type the following commands `A*` = append '*' to the end of current line Или аналогично: `:%s/$/\*/g` #### sed search and replace vim https://vim.fandom.com/wiki/Search_and_replace - Найти и заменить 'foo' на 'bar' (в текущей строке) ```bash :s/foo/bar/g ``` - Найти и заменить 'foo' на 'bar' (во всех строках) ```bash :%s/foo/bar/g ``` - Найти и заменить 'foo' на 'bar' (во всех строках) но спрашивать подтверждение каждый раз ```bash :%s/foo/bar/gc ``` #### Визуальный режим, блоковая вставка/удаление, режим работы с блоками. ###### Заккоментировать блок текста: 1. `Esc` - (чтобы выйти из текущего режима) 2. Стрелками помещаем курсор на начало первой строки с которой хотим начать блок комментариев 3. `ctrl+v` - режим визуального (блочного) редактирования 4. Используя стрелки, выбераем строки которые хотим закомментировать. (не все будет выделено - это нормально!) 5. `Shift+i` (заглавная `I`) • Вставляем текст которых хотим, например `#` это добавит `#` к первой строке • Для применения изменений, ждем или нажимаем `EscEsc` Для урезанной версии vim, поставляемой с debian/ubuntu по умолчанию, вместо этого введите : s/^/# на третьем шаге. ##### Чтобы расскоментировать блок текста: 1. `Esc` - (чтобы выйти из текущего режима) 2. Стрелками помещаем курсор на начало первой строки с которой хотим начать блок комментариев 3. `ctrl+v` - режим визуального (блочного) редактирования 4. Используя стрелки, выбераем строки для раскомментирования (не все будет выделено - это нормально!) Если вы хотите выделить несколько символов, используйте один из этих методов или комбинируйте их: - используйте клавиши со стрелками влево/вправо, чтобы выделить больше текста - для выделения фрагментов текста используйте клавиши shift + ←/→ стрелка - можно многократно нажимать клавиши удаления внизу, как обычную кнопку удаления - нажмите d или x для удаления символов, при необходимости несколько раз. ##### Вырезать несколько строк: • Нажмите - `V` Выберите все, что вы хотите вырезать без подсчета Нажмите `d` Перейдите туда, куда вы хотите вставить Нажмите-` p` • Или: `d<n>d` где `<n> `- это количество строк, которые вы хотите вырезать, а затем вставить их с помощью: `p` #### Параметры вим ##### Отобразить ВСЕ текущие настройки vim `:set all` `:set` ##### Включить номерацию строк `:set number` или `:set nu` Спрятать нумерацию строк set nonumber ##### Отключить режим виртуальной мыши, в vim Debian `set mouse-=a` ###### Можно приостановить вим, вернувшись в ту сессию баша, из которой он был запущен: Ctrl+Z (возврат - fg) А можно запустить из-под вима новую сессию:`:!bash` (возврат - exit) Относительно консоли — в Vim'е есть команда `:sh`. Она вызовет то, что записано в &shell (туда записывается по умолчанию содержимое $SHELL). У меня это zsh. ##### Отключение автоматического отступа при вставке текста в vim multiline pasting Чтобы отключить автоотступ при вставке кода, существует специальный режим «вставки». ``` :set paste ``` Затем вставьте свой код. Обратите внимание, что текст во всплывающей подсказке теперь говорит `-- INSERT (paste) --`. После того, как вы вставили свой код, отключите режим вставки, чтобы автоматический отступ при вводе снова работал правильно. ``` :set nopaste ``` Тем не менее, я всегда находил это громоздким. Вот почему я сопоставляю `<F3>`так, чтобы он мог переключаться между режимами вставки и не вставки _при редактировании текста!_ я добавляю это к`.vimrc` ``` set pastetoggle=<F3> ``` Откройте конфигурационный файл Vim. Обычно это файл .vimrc в вашем домашнем каталоге. Для этого используйте команду: ```bash vim ~/.vimrc ``` Добавьте следующую строку в конец файла: ```bash set paste ``` Вариант с автопереключением, здесь:[https://stackoverflow.com/a/38258720/62202](https://stackoverflow.com/a/38258720/62202) ## Используемые или важные ключи. ### Файлы #T/T/To/Do/Note/Refactor Шпаргалка из https://eax.me/vim-commands/ ``` ## Моя шпаргалка по работе в Vim 5 октября 2009 Самое главное — побороть боязнь белого листа. Я всегда говорю это себе, когда нужно начать работу над чем-то и не знаешь, как подступиться. Так что я решил не ломать голову над тем, о чем будет первая запись в этом блоге, а просто выложить небольшую шпаргалку по текстовому редактору Vim. Шпаргалка эта уже не первый месяц хранится у меня в ~/txt/vim.txt. За это время я успел составить довольно объемный справочник по основным командам Vim. При желании вы можете начать свое обучение работе с Vim с этого поста. Итак, вот она: Файл настройки: ~/.vimrc Можно редактировать файлы через сеть, например :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:                         История команд .                          Повторение последней команды Более подробный материал об использовании текстового редактора Vim вы найдете в книге [Изучаем редакторы vi и Vim, 7-е издание](http://www.books.ru/books/izuchaem-redaktory-vi-i-vim-7-e-izdanie-827256/). Книга доступна как в бумажном, так и в электронном формате. ```