This commit is contained in:
2019-04-20 23:24:14 +03:00
parent 0125f9cbee
commit 80287870a3
35 changed files with 2167 additions and 26 deletions

21
wiki/Vim/Vimdiff.md Normal file
View File

@ -0,0 +1,21 @@
---
title: Vimdiff
category: Vim
tags: Vim, команды Vim
summary:
CSS: table-100.css
...
Команды режима `diff` для сравнения и слияния файлов:
Команда | Назначение
-------------|------------
`do` | Получить изменения из второго окна в текущее окно
`dp` | Вставить изменения из текущего окна во второе окно
`]c` | Перейти к следующему отличию
`[c` | Перейти к предыдущему отличию
`C-W` `C-W` | Переход между окнами
[Видеоурок](http://vimcasts.org/episodes/fugitive-vim-resolving-merge-conflicts-with-vimdiff/)
по трехпутевому слиянию.

View File

@ -0,0 +1,24 @@
---
title: "Vim: замена выделенного блока"
category: Vim
tags: Vim, команды Vim
summary:
CSS: table-100.css
...
Замену блока, выделенного в режиме VISUAL, можно выполнить
последовательностью команд `y:%s/<ctrl-r>"/заменитель/g`.
Команда | Назначение
---------------|-------------
`y` | Копирование в регистр &quot;
`&#58;` | Перейти в командный режим
`%` | Применить ко всему буферу
`s` | Замена
`Сtrl-r` | Вставка из регистра
`&quot;` | Имя регистра (будет предложено по умолчанию)
`/` | Разделитель
`заменитель` | Новый текст
`/` | Разделитель
`g` | Для всех вхождений в строке

View File

@ -0,0 +1,48 @@
---
title: "Vim: клавиши Leader и LocalLeader"
category: Vim
tags: Vim, команды Vim
summary:
...
Клавиши `Leader` и `LocalLeader` представляют собой префиксы для команд.
Их текущие значения можно посмотреть командами
```vim
:echo mapleader
:echo maplocalleader
```
Часто их значения переназначают в файле `$HOME/.vimrc`, например так
```vim
let mapleader = "\<Space>"
let maplocalleader = ","
```
Новое значение команды генерируется с помощью текущих значений этих
переменных, таким образом последовательность команд
```vim
let mapleader = ","
nnoremap <Leader>a :echo "Hey there ,"<CR>
let mapleader = "\<Space>"
nnoremap <Leader>a :echo "Hey there space"<CR>
```
приведёт к тому, что будут созданы две команды `,a` и `<Space>a`,
следовательно для получения единообразных команд следует помещать
переназначения в начало файла `$HOME/.vimrc`.
`LocalLeader` отличается от `Leader` тем, что действует только для
текущего буфера, поэтому обычно используется в плагинах, загружаемых
для определённых типов файлов.
Таймауты для ввода команд, использующих клавиши `Leader` и
`LocalLeader`, настраиваются командой
```vim
set timeout timeoutlen=5000 ttimeoutlen=100
```

View File

@ -0,0 +1,22 @@
---
title: "Vim: клавиши PageUp и PageDown"
category: Vim
tags: Vim, команды Vim
summary:
...
Чтобы поведение клавиш `PageUp` и `PageDown` совпадало с более
привычным, можно добавить в `$HOME/.vimrc` следующий код:
```vim
" Более привычные PgUp / PgDown, когда курсор остаётся в той же строке, "
" а не переносится вверх / вниз экрана, как при стандартном PgUp / PgDown. "
" Поскольку по умолчанию прокрутка по C-U / C-D, при которой курсор остаётся
" на месте, происходит на полэкрана, привязка делается к двойному нажатию
" этих комбинаций. "
nmap <PageUp> <C-U><C-U>
nmap <PageDown> <C-D><C-D>
imap <PageUp> <C-O><C-U><C-O><C-U>
imap <PageDown> <C-O><C-D><C-O><C-D>
```

View File

@ -0,0 +1,33 @@
---
title: "Vim: кодировка файла"
category: Vim
tags: Vim
summary:
...
Для управления кодировкой файлов можно создать дополнительное меню,
позволяющее открыть файл в выбранной кодировке, проверить её
корректность и сохранить в нужном виде. Пример кода:
```vim
" кодировка для чтения файла
set encoding=utf-8
" кодировка терминала
set termencoding=utf-8
" кодировка для записи файла
set fileencoding=utf-8
" список предполагаемых кодировок в порядке предпочтения
set fileencodings=utf8,koi8r,cp1251,cp866,latin1,ucs-2le
set wildmenu
set wcm=<Tab>
menu Encoding.Open\ as\ KOI8-R :e ++enc=koi8-r<CR>
menu Encoding.Open\ as\ CP1251 :e ++enc=cp1251<CR>
menu Encoding.Open\ as\ CP866 :e ++enc=cp866<CR>
menu Encoding.Open\ as\ LATIN1 :e ++enc=latin1<CR>
menu Encoding.Open\ as\ UCS-2LE :e ++enc=ucs-2le<CR>
menu Encoding.Open\ as\ UTF-8 :e ++enc=utf-8<CR>
menu Encoding.Convert\ to\ UTF-8 :set fenc=utf-8<CR>
map <F12> :emenu Encoding.<Tab>
```

View File

@ -0,0 +1,27 @@
---
title: "Vim: комментирование кода"
category: Vim
tags: Vim, команды Vim
summary:
CSS: table-100.css
...
Отмена автоматического комментирования кода при вставке из буфера:
```Vim
autocmd FileType * setlocal formatoptions-=cro
```
Для управления комментированием можно использовать плагин
[NerdCommenter](https://github.com/scrooloose/nerdcommenter).
Основные команды:
Команда | Назначение
----------------------|----------------------------
`[n]<leader\>cc` | комментировать блок
`[n]<leader\>cn` | комментировать с учётом вложенности
`[n]<leader\>cl` | символ комментария помещать в начало строки
`[n]<leader\>ci` | инвертирование комментариев
`<leader\>cA` | добавить комментарий в конец строки
`[n]<leader\>cu` | раскомментировать блок

View File

@ -0,0 +1,44 @@
---
Title: "Vim: менеджер плагинов Plug"
Category: Vim
Tags: Vim, плагины Vim
Summary:
...
Автоматическое управление плагинами в Vim можно организовать
с помощью менеджера [Plug](https://github.com/junegunn/vim-plug),
установить который можно командой
```sh
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
```
Чтобы использовать Plug, нужно добавить в `$HOME/.vimrc`:
1. Строку `call plug#begin('~/.vim/plugged')`
2. Список строк, начинающихся с команды `Plug`, для загрузки плагинов
3. Закончить список командой `call plug#end()`
Пример:
```vim
" Обязательно использовать одиночные кавычки
call plug#begin('~/.vim/plugged')
" Краткая запись для работы с github: https://github.com/junegunn/vim-easy-align
Plug 'junegunn/vim-easy-align'
" Вариант с полным адресом
Plug 'https://github.com/junegunn/vim-github-dashboard.git'
" Загрузка при выполнении команды
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' }
" Загрузка для определённого типа файлов
Plug 'tpope/vim-fireplace', { 'for': 'clojure' }
" Окончание списка плагинов
call plug#end()
```

View File

@ -0,0 +1,53 @@
---
title: "Vim: навигация по тексту с помощью easymotion"
category: Vim
tags: Vim, команды Vim
summary:
...
Плагин [easymotion](https://github.com/easymotion/vim-easymotion)
предоставляет функции для удобного перемещения по тексту.
Пример настройки:
```vim
" Не включать команды по умолчанию
let g:EasyMotion_do_mapping = 0
" Умный регистр
let g:EasyMotion_smartcase = 1
" <Leader>ec{char} для перехода к {char}
map <Leader>ec <Plug>(easymotion-bd-f)
nmap <Leader>ec <Plug>(easymotion-overwin-f)
" s{char}{char} для перехода к {char}{char}
nmap s <Plug>(easymotion-overwin-f2)
" Переход к строке
map <Leader>eg <Plug>(easymotion-bd-jk)
nmap <Leader>eg <Plug>(easymotion-overwin-line)
" Переход к слову
map <Leader>ew <Plug>(easymotion-bd-w)
nmap <Leader>ew <Plug>(easymotion-overwin-w)
" Навигация по строкам
map <Leader>el <Plug>(easymotion-lineforward)
map <Leader>ej <Plug>(easymotion-j)
map <Leader>ek <Plug>(easymotion-k)
map <Leader>eh <Plug>(easymotion-linebackward)
" Повторить последний переход
map <Leader>er <Plug>(easymotion-repeat)
" Замена стандартного поиска по тексту
map / <Plug>(easymotion-sn)
omap / <Plug>(easymotion-tn)
" These `n` & `N` mappings are options. You do not have to map `n` & `N` to EasyMotion.
" Without these mappings, `n` & `N` works fine. (These mappings just provide
" different highlight method and have some other features )
map n <Plug>(easymotion-next)
map N <Plug>(easymotion-prev)
```

View File

@ -0,0 +1,17 @@
---
title: "Vim: навигация по буферам"
category: Vim
tags: Vim, команды Vim
summary:
CSS: table-100.css
...
Команда | Назначение
------------------|-----------------
`:bn` | следующий буфер
`:bp` | предыдущий буфер
`:ls` | список открытых буферов
`:bd` | закрыть текущий буфер
`:b имя_буфера` | переключиться на буфер
`:bdа имя_буфера` | удалить буфер по имени

View File

@ -0,0 +1,35 @@
---
title: "Vim: нумерация строк"
category: Vim
tags: Vim, команды Vim
summary:
...
Для переключения режимов отображения слева столбца нумерации
строк можно добавить в `$HOME/.vimrc` следующий код:
```vim
" Нумерация строк включена
set number
" Нумерация строк абсолютная
set nornu
function! ChangeNumbering()
if &number
if &rnu
set nornu
else
set nonumber
endif
else
set number
set rnu
endif
endfunc
map <LocalLeader># <Esc>:call ChangeNumbering()<CR>
```
В результате по команде `<LocalLeader>#` будет осуществляться
циклическое переключение между абсолютной, относительной нумерацией
строк и отключением нумерации.

View File

@ -0,0 +1,39 @@
---
title: "Vim: проверка орфографии"
category: Vim
tags: Vim, команды Vim, словарь, орфография
summary:
...
Код в `$HOME/.vimrc` для циклического переключения режимов проверки
орфографии: два языка, английский, русский и без проверки:
```Vim
" По умолчанию проверка орфографии для русского и английского.
setlocal spell spelllang=ru,en
set spellsuggest=9
function! ChangeSpellLang()
if &spelllang == "ru,en"
setlocal spell spelllang=en
echo "spelllang: en"
elseif &spelllang == "en"
setlocal spell spelllang=ru
echo "spelllang: ru"
elseif &spelllang == "ru"
setlocal nospell spelllang=
echo "spelllang: off"
else
setlocal spell spelllang=ru,en
echo "spelllang: ru,en"
endif
endfunc
" map spell on/off for English/Russian
map <C-F7> <Esc>:call ChangeSpellLang()<CR>
" выбор альтернатив
imap <F7> <Esc> z=<CR>i
map <F7> z=<CR>
```

12
wiki/Vim/Ссылки.md Normal file
View File

@ -0,0 +1,12 @@
---
title: "Vim: полезные ссылки"
category: Vim
tags: Vim
summary:
...
* [Vim](http://vim.org)
* [Usevim](http://usevim.com/)
* [How I boosted my Vim](http://nvie.com/posts/how-i-boosted-my-vim/)
* [How to boost your Vim productivity](https://sheerun.net/2014/03/21/how-to-boost-your-vim-productivity/)
* [Vim Awesome](https://vimawesome.com/)

View File

@ -0,0 +1,22 @@
---
title: "Vim: управление окнами"
category: Vim
tags: Vim, команды Vim
summary:
CSS: table-100.css
...
Команда | Назначение
--------------------|-------------------------
`:split filename` | открыть в новом окне (горизонтальное разделение)
`:vsplit filename` | открыть в новом окне (вертикальное разделение)
`<C-W>` `<C-W>` | перейти к следующему окну
`<C-W>` `q` | закрыть текущее окно
`<C-W>` `o` | развернуть окно полностью
`<C-W>` `_` | развернуть окно по высоте
`<C-W>` `|` | развернуть окно по ширине
`<C-W>` `=` | выровнять размер окон
`<C-W>` `+` | увеличить окно на 1 строку
`<C-W>` `-` | уменьшить окно на 1 строку
`<C-W>` `стрелки` | перемещение между окнами