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/). Книга доступна как в бумажном, так и в электронном формате.
```