Vim

Заметка про VIM

Горячие клавиши в VimГорячие клавиши в Vim

Форматирование:

Для не отформатированных файлов

:!js-beautify % -o %

Использование prettier

nnoremap <C-f> :silent exec "!npx prettier % --write --trailing-comma=all --single-quote=true --print-width=100"<cr> :redraw!<cr>

Буферы

Fuzzy поиск по именам файлов (в открытых буферах).

:b fuzzy

Настраиваем горячую клавишу, например f:

nnoremap <Leader>f :set nomore<Bar>:ls<Bar>:set more<CR>:b<Space>

Git

Вызвать git-blame для выделенной, в VISUAL MODE, части текста

vnoremap <Leader>b :<C-U>!git blame <C-R>=expand("%:p") <CR> \| sed -n <C-R>=line("'<") <CR>,<C-R>=line("'>") <CR>p <CR>

Выполнить команду под курсором

Мой пример вставляет строку под курсором в командную строку VIM. Выполнять нужно в командном режиме (command mode) :, добавляем ! знак чтобы последующая строка выполнилась в shell. Далее пара комбинаций — CTRL+R (вставить из регистра) и CTRL+L (line), или CTRL-W (word).

:! CTRL+R CTRL+L

Подробнее про CTRL+R.

Опции VIM

При открытии файла установить курсор в последней позиции

au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif

Автоматически удалять висячие пробелы при сохранении

autocmd BufWritePre *.{bemhtml,bemtree,js,c,css} :%s/\s\+$//e

Центровать результат поиска всегда по центру

nnoremap n nzz
nnoremap N Nzz
nnoremap * *zz
nnoremap # #zz
nnoremap g* g*zz
nnoremap g# g#zz

Загрузить предыдущую сессию

set viminfo='10,\"100,:20,%,n~/.viminfo

Поставить курсор на предыдущую позицию открывая файл

au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif

Изменять директорию до места где находится редактируемый файл

autocmd BufEnter * lcd %:p:h

Работа с файлами

Изменение текста между html/xml tags. Описание :h it или :h tag-blocks

cit

Открыть файл под курсором

gf

Открыть файл под курсором в отдельном сплите

CTRL-w+f

Поиск

Найти слово над которым курсор

*

Поиск по файлам

:grep PATERN [PATH] | :copen

Поиск только в открытых буферах

:bufdo vim PATREN ## | :copen

Выделить несколько буферов для поиска

:args `git diff --name-only`
:bufdo vim PATREN ## | :copen

Без вывода предупреждений

:noautocmd bufdo vimgrepadd /debugger/j %

Поместить в список аргументов файлы из буфера

:argdelete ##
:bufdo argadd %

:bufdo vim PATREN ## | :copen

Открыть список с результатами поиска по файлам

:copen
:cw

Go to Definition

Перейти к определению.

gd — перейти к определению в файле

Пользуюсь ctags с настройками для typescript. Тут можно подсмотреть настройки для TypeScript и JavaScript.

В проекте строим файл tags.

ctags -R .

После чего можно будет использовать команды:

Текст

Записать выделенный текст в файл

:'<,'>w text.txt

Перейти к последнему выделенному фрагменту текста

gv

Выравнивание текста

:center [width]
:right [width]
:left

Таблица с символами

:help digraph-table

В режиме редактирования через CTRL+k

«   <<
»   >>
—   M-
©   Co
®   Rg
±   +-
λ   l*
π   p*
δ   d*

Функции

В режиме редактирования активируем калькулятор CTRL+r+= вводим выражение, жмём Enter

CTRL+r+=512/2 Enter
256

Сортировка по длине строк

:'<,'> ! awk '{ print length(), $0 | "sort -n | cut -d\\ -f2-" }'

Синтаксис

Открыть файл без расширения с нужным синтаксисом. Добавить в конец файла комментарий

# vim: syntax=config

Ссылки