Syntax highlighting of a514140 ~( vim)
[TOC] # Links https://danielmiessler.com/study/vim/#gs.Xg9jNGw https://www.labnol.org/internet/learning-vim-for-beginners/28820/ [Шпаргалка](https://eax.me/vim-commands/) [VimCasts](http://vimcasts.org/) https://gist.github.com/theotherzach/5033931 [Эффективное использование Vim](https://habr.com/post/131951/) [Минимум один трюк Vim, про который вы не знали](https://habr.com/ru/post/454742/) # Recipes ```vim " spaces to tabs %!unexpand -t 2 --first-only " tabs to spaces set tabstop=2 shiftwidth=2 expandtab :retab " объединяем строки через запятую или запятую с пробелом " https://vi.stackexchange.com/a/4149/26373 :'<,'>s/\n/,/ :'<,'>s/\n/, / " Rails.vim - кандидат на альтернативный файл " можно использовать для создания нового файла :echo rails#buffer().alternate_candidates() ``` ```bash # --- vim as default editor sudo update-alternatives --config editor ``` # .gitignore ``` # Swap [._]*.s[a-v][a-z] [._]*.sw[a-p] [._]s[a-rt-v][a-z] [._]ss[a-gi-z] [._]sw[a-p] # Session Session.vim Sessionx.vim # Temporary .netrwhist *~ # Auto-generated tag files tags # Persistent undo [._]*.un~ ``` # Commands ## View Command (via :set) | Description ---|--- `cursorline` | подсветка текущей строки `hls` | Подсветка поискового запроса `list` | Отображение непечатных символов `number` | отображение номеров строк ## Buffer Navi Command | Decsription ---|--- NORM| `:Exp` | Эксплоер <kbd>+</kbd> | На первый символ следущей строки <kbd>-</kbd> | На первый символ предыдущей строки <kbd>Ctrl</kbd>+<kbd>g</kbd> | Отображение информации о текущем расположении курсора <kbd>Ctrl</kbd>+<kbd>e</kbd> | Прокручивание на одну строку вниз <kbd>Ctrl</kbd>+<kbd>y</kbd> | Прокручивание на одну строку вверх <kbd>Ctrl</kbd>+<kbd>d</kbd> | Вниз на полстраницы <kbd>Ctrl</kbd>+<kbd>u</kbd> | Вверх на полстраницы <kbd>Ctrl</kbd>+<kbd>f</kbd> | Вниз на страницу <kbd>Ctrl</kbd>+<kbd>b</kbd> | Вверх на страницу <kbd>Ctrl</kbd>+<kbd>o</kbd> | Перейти на предыдущую позицию в истории переходов <kbd>Ctrl</kbd>+<kbd>i</kbd> | Перейти на следующую позицию в истории переходов <kbd>Ctrl</kbd>+<kbd>j</kbd> | Перейти по гиперссылке <kbd>Ctrl</kbd>+<kbd>t</kbd> | Перейти назад по истории переходов по гиперссылкам `:e %:h/filename` | Открыть (создать) файл *filename* в текущей директории ## Clipboard Command | Decsription ---|--- <kbd>p</kbd> | вставляем из буфера после курсора <kbd>P</kbd> | (заглавная p) вставляем из буфера перед курсором <kbd>y</kbd><kbd>y</kbd><kbd>p</kbd> или <kbd>Y</kbd><kbd>p</kbd> | Дублировать строку <kbd>"</kbd><kbd>a</kbd><kbd>y</kbd> | Скопировать текст в буффер `a` <kbd>"</kbd><kbd>a</kbd><kbd>p</kbd> | Вставить текст из буффера `a` <kbd>"</kbd><kbd>+</kbd><kbd>y</kbd> | Копировать в системный буфер обмена ## Editing Command | Decsription ---|--- <kbd>i</kbd> | Переход в режим редактирования. Курсор остается на месте <kbd>I</kbd> | Заглавная `i`. Переход в режим редактирования. Курсор переходит в начало строки. <kbd>a</kbd> | Переход в режим редактирования. Курсор переходит на следующий символ. <kbd>A</kbd> | Переход в режим редактирования. Курсор переходит в конец строки. <kbd>o</kbd> | Переход в режим редактирования с созданием пустой строки ниже. Курсор переходит на новую строку. <kbd>O</kbd> | Заглавная `o`. Переход в режим редактирования с созданием пустой строки выше. Курсор переходит на новую строку. <kbd>s</kbd> | Переход в режим редактирования с удалением текущего символа. <kbd>N</kbd><kbd>s</kbd> | Удаление N-символов и переход в режим редактирования <kbd>S</kbd> | Переход в режим редактирования с удалением строки. <kbd>r</kbd><kbd>x</kbd> | Заменить символ под курсором на символ `x` `R` | Переход в режим замены <kbd>c</kbd><kbd>c</kbd> | Удаление строки, переход в режим редактирования и отступ <kbd>c</kbd><kbd>$</kbd> | Удаление от курсора до конца строки и переход в режим редактирования <kbd>c</kbd><kbd>e</kbd> | Удаление символов от курсора до конца слова и переход в режим редактирования <kbd>d</kbd><kbd>i</kbd><kbd>)</kbd> | Удаление символов между скобками <kbd>d</kbd><kbd>i</kbd><kbd>"</kbd> | Удаление символов между кавычками <kbd>d</kbd><kbd>d</kbd><kbd>p</kbd> | Удаление строки и вставка ее ниже следующей (смена строк) <kbd>u</kbd> | Отмена изменений, сделанных крайней командой <kbd>U</kbd> | (заглавная `u`) Отмена крайних изменений в строке ## Find Command | Description ---|--- <kbd>f</kbd><kbd>x</kbd> |Поиск далее по строке символа x <kbd>2</kbd><kbd>f</kbd><kbd>x</kbd> | Поиск второго символа `х` в строке <kbd>t</kbd><kbd>x</kbd> | Поиск далее по строке символа `x`x с установкой курсора перед ним <kbd>F</kbd><kbd>x</kbd> | Поиск назад по строке символа x <kbd>T</kbd><kbd>x</kbd> | Поиск назад по строке символа x с установкой курсора перед ним <kbd>*</kbd> | Поиск всех вхождений слова под курсором <kbd>#</kbd> | Поиск всех вхождений слова под курсором (в обратном направлении) `/text` | Поиск `?text` | Поиск в обратном направлении <kbd>n</kbd> | Переход к следующему совпадению <kbd>N</kbd> | Переход к предыдущему совпадению ## Visual Mode Command | Description ---|--- <kbd>v</kbd> | включаем визуальный режим <kbd>V</kbd> | строчное выделение <kbd>y</kbd> | копируем выделенное <kbd>d</kbd> | вырезаем выделенное <kbd>u</kbd> | преобразование в нижний регистр ## Windows Command | Description ---|--- <kbd>Ctrl</kbd>+<kbd>g</kbd> | Отображение информации о позиции в файле <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>r</kbd> | поменять местами компоновку <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>w</kbd> | переключение курсора между буферами компоновки <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>_</kbd> | максимизировать окно <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>=</kbd> | выровнять окна <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>c</kbd> | закрыть текущее окно <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>H</kbd> | переключение горизонтальной в вертикальную компоновку <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>J</kbd> | переключение вертикальной в горизонтальную компоновку ## Tabs [link](http://vim.wikia.com/wiki/Using_tab_pages) Command | Description ---|--- `$vim -p file1 file2` | открываем vim с вкладками `:tabn file3` | открываем файл file3 в новой вкладке `:tabf index*` | открываем файл с шаблону имени `:tabn` (или <kbd>g</kbd><kbd>t</kbd>) | следующая вкладка <kbd>g</kbd><kbd>T</kbd> | предыдущая вкладка <kbd>i</kbd><kbd>g</kbd><kbd>t</kbd> | перейти на i-ую вкладку `:tabfirst` | первая вкладка `:tablast` | последняя вкладка `:tabs` | список вкладок `:tabm X` | перемещаем текущую вкладку на позицию Х+1 `:tabclose`<br>`:q` | закрываем текущую вкладку `:tabclose i` | закрываем i-ую вкладку `:tabonly` | закрываем все вкладки кроме текущей ## Reduce & Expand Command | Decsription ---|--- <kbd>z</kbd><kbd>c</kbd> | свернуть блок <kbd>z</kbd><kbd>o</kbd> | развернуть блок <kbd>z</kbd><kbd>M</kbd> | свернуть все блоки <kbd>z</kbd><kbd>R</kbd> | развернуть все блоки <kbd>z</kbd><kbd>a</kbd> | инвертировать свернутые блоки ## Macros Command | Decsription ---|--- <kbd>q</kbd><kbd>a</kbd> | Старт записи макроса `a`. <kbd>q</kbd> | остановка записи макроса. <kbd>@</kbd><kbd>a</kbd> | Вызов макроса `a` <kbd>n</kbd><kbd>@</kbd><kbd>a</kbd> | исполнение макроса n-раз ## Marks Command | Decsription ---|--- <kbd>m</kbd><kbd>a</kbd> | Установка метки `a`. <kbd>'</kbd><kbd>a</kbd> | переход на метку `a` <kbd>d</kbd><kbd>'</kbd><kbd>a</kbd> | удалить всё до метки `a` `:marks` | Отображение меток `:delm!` | Удаление всех меток в нижнем регистре ## Commentary [commentary.vim](https://github.com/tpope/vim-commentary) - плагин для комментариев Command | Description ---|--- NORM | <kbd>g</kbd><kbd>c</kbd><kbd>c</kbd> | комментирование строки <kbd>N</kbd><kbd>g</kbd><kbd>c</kbd><kbd>c</kbd> | Комментирование *N* строк <kbd>g</kbd><kbd>c</kbd><kbd>}</kbd> | Комментировать до конца параграфа <kbd>g</kbd><kbd>c</kbd><kbd>{</kbd> | Комментировать до начала параграфа <kbd>g</kbd><kbd>c</kbd><kbd>N</kbd><kbd>k</kbd> | Комментировать N строк вверх `:X,YCommentary` | Коментирование строк X-Y ## Surround [vim-surround](https://github.com/tpope/vim-surround) - оборачивание текста в кавычки и скобки [Документация](https://github.com/tpope/vim-surround/blob/master/doc/surround.txt) Command | Description ---|--- | Normal Mode <kbd>d</kbd><kbd>s</kbd><kbd>'</kbd> | Удаление одинарных кавычек <kbd>d</kbd><kbd>s</kbd><kbd>"</kbd> | Удаление двойных кавычек <kbd>c</kbd><kbd>s</kbd><kbd>"</kbd><kbd>'</kbd> | Замена двойных кавычек на одинарные | Visual Mode <kbd>S</kbd><kbd>'</kbd> | оборачивание выделенного текста в одинарные кавычки <kbd>S</kbd><kbd>"</kbd> | оборачивание выделенного текста в двойные кавычки ## FZF https://github.com/junegunn/fzf ```bash git clone --depth 1 https://github.com/junegunn/fzf.git ~/.fzf ~/.fzf/install cd ~/.vim-config/.vim/bundle git clone https://github.com/junegunn/fzf ``` .vimrc ```vim " --- open zfz on Ctrl + P nnoremap <C-p> :<C-u>FZF<CR> ``` Command | Decsription ---|--- <kbd>Ctrl</kbd>+<kbd>p</kbd> | Включение режима zfz <kbd>Ctrl</kbd>+<kbd>c</kbd> | Отключение режима zfz <kbd>Ctrl</kbd>+<kbd>j</kbd> or <kbd>Down</kbd> | Выделение вниз <kbd>Ctrl</kbd>+<kbd>k</kbd> or <kbd>Up</kbd> | Выделение вверх <kbd>Ctrl</kbd>+<kbd>x</kbd> | Открыть выделенный файл с горизонтальным разделением <kbd>Ctrl</kbd>+<kbd>v</kbd> | Открыть выделенный файл с вертикальным разделением <kbd>Ctrl</kbd>+<kbd>t</kbd> | Открыть выделенный файл новой вкладке ## Grep Command | Decsription ---|--- `:vimgrep QUERY dir/**` | Поиск строки QUERY в файлах директории dir/ ## Quickfix Command | Decsription ---|--- `:copen` | Open the quickfix window `:ccl` | Close window `:cw` | Open it if there are "errors", close it otherwise (some people prefer this) `:cn` | Go to the next error in the window `:cp` | Go to previous `:cnf` | Go to the first error in the next file ## Bash Command | Decsription ---|--- `:!cmd` | Выполнить bash-команду `cmd` `:!motionCMD` | Фильтрация строк, попадающих под *motion*, bash-командой *CMD*. Например, `!10Gsort` - сортировка строк между текущей и 10й bash-командой *sort* `:!` | Выполнить пустую команду (отобразить предыдущий вывод) `:.!cmd` | Выполнение bash-команды *cmd* и вставка стандартного вывода в текущую строку. Пример: `:.!date` ## Terminal Команда `:term` включает терминал с горизонтальным разделением. Переход между терминалом и редактором <kbd>Ctrl</kbd><kbd>w</kbd>+<kbd>w</kbd> В терминале переход в режим просмотра комбинацией <kbd>Ctrl</kbd><kbd>w</kbd>+<kbd>N</kbd> Выход из режима просмотра <kbd>i</kbd> или <kbd>a</kbd> ## Misc Command | Decsription ---|--- NORM| `:set paste` | Режим "вклейки". Текст вставляется "как есть", без автоотсутпов `:set nopaste` | Отключение режима "вклейки" `:set autowrite` | Автоматическая запись при переходе к другому файлу. INSERT| `C-R "` | Вставить текст, скопированный yank `ccl` | Скрыть список быстрых исправлений `C-K AB` | Вставка символа из таблицы символов, `AB` комбинация из таблицы `:digraphs` `:retab` | Изменить режим отступов в соответствии с текущими настройками Трансляция кириллицы в латиницу. Позволяет выполнять команды в кириллической раскладке. https://github.com/powerman/vim-plugin-ruscmd ```vim # переключение курсора между буферами (,l) let mapleader = "," nmap <Leader>l <C-w>w ``` ```vim # переключение курсора между буферами (,l) let mapleader = "," nmap <Leader>l <C-w>w ``` # Python https://skillbox.ru/media/code/prevrashchaem-vim-v-polnotsennuyu-ide-dlya-python/ # Rails [Rails.Vim](https://github.com/tpope/vim-rails) [vim-bundler](https://github.com/tpope/vim-bundler) [vim-dispatch](https://github.com/tpope/vim-dispatch) [RailsCasts Color Scheme](https://github.com/jpo/vim-railscasts-theme) https://robots.thoughtbot.com/extending-rails-vim-with-custom-commands Command | Description ---|--- <kbd>g</kbd><kbd>f</kbd> | Перейти к файл под курсором <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>g</kbd><kbd>f</kbd> | Открыть файл под курсором в новой вкладке <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>f</kbd> | Открыть файл под курсором с горизонтальным разделением <kbd>Ctrl</kbd>+<kbd>w</kbd><kbd>v</kbd><kbd>g</kbd><kbd>f</kbd> | Открыть файл под курсором с вертикальным разделением `:A` | Alternate. Переключение между MVC и MVC spec `:R` | Related. Переключение связанных сущностей: экшн контроллера - вьюха, `:{E/S/V/T}controller` | перейти к контроллеру `:{E/S/V/T}helper` | перейти к хелперу `:{E/S/V/T}init` | переход в *routes.rb* `:{E/S/V/T}mailel` | перейти к майлеру `:{E/S/V/T}migration` | перейти к миграции `:{E/S/V/T}schema` | перейти к файлу схему `:{E/S/V/T}task` | перейти к задаче `:{E/S/V/T}layout` | перейти к корневому представлению |`E` - в текущей вкладке `:edit`<br>`S` - `:split`<br>`V` - `:vsplit`<br>`T` - `:tabedit` `:Rails console` | запуск Rails console `:Generate controller Blog` | Запуск генератора `:help Rails` | Справка по плагину https://www.sitepoint.com/effective-rails-development-vim/ https://github.com/smolnar/vim-rails-bundle https://robots.thoughtbot.com/intro-rails-vim https://masteruby.github.io/productivity-booster/2014/05/02/vim-plugins-for-ruby.html#.WnCE03omzCI # Golang [vim-go](https://github.com/fatih/vim-go) | - полезные команды ```bash git clone https://github.com/fatih/vim-go.git ~/.vim/bundle/vim-go ``` [readme](https://github.com/fatih/vim-go/blob/master/doc/vim-go.txt) [tagbar](https://github.com/majutsushi/tagbar) - панель со структурой файла ```bash git clone git@github.com:majutsushi/tagbar.git ~/.vim/bundle/vim-tagbar ``` Добавляем строку в *.vimrc* ```vim " ~/.vimrc nmap <F8> :TagbarToggle<CR> ``` Для корректной работы *tagbar* требуется *ctags*. ```bash sudo apt-get install autoconf git clone git@github.com:universal-ctags/ctags.git cd ctags ./autogen.sh ./configure make sudo make install ``` [vim-compiler-go](https://github.com/rjohnsondev/vim-compiler-go) - проверка синтаксиса ```bash git clone https://github.com/rjohnsondev/vim-compiler-go.git ~/.vim/bundle/vim-compiler-go ``` В файл *.vimrc* необходимо прописать путь к директории установки Golang. ```vim " ~/.vimrc let g:golang_goroot = "/usr/lib/go-1.10" ``` Узнать полный путь к этой директории можно командой ```bash go env GOROOT ``` # Snippets https://github.com/SirVer/ultisnips ```bash cd ~/.vim/bundle && git clone git://github.com/SirVer/ultisnips.git cd ~/.vim/bundle && git clone git://github.com/honza/vim-snippets.git ``` ```vim " ~/.vimrc " Trigger configuration. Do not use <tab> if you use https://github.com/Valloric/YouCompleteMe. let g:UltiSnipsExpandTrigger="<tab>" let g:UltiSnipsJumpForwardTrigger="<c-b>" let g:UltiSnipsJumpBackwardTrigger="<c-z>" " If you want :UltiSnipsEdit to split your window. let g:UltiSnipsEditSplit="vertical" ``` Открытие редактора снипетов `:UltiSnipsEdit` Документация `:help UltiSnips` (или [онлайн](http://bazaar.launchpad.net/~sirver/ultisnips/trunk/view/head:/doc/UltiSnips.txt)) [UltiSnips Screencast Episode 1](https://www.sirver.net/blog/2011/12/30/first-episode-of-ultisnips-screencast/) [UltiSnips Screencast Episode 2](https://www.sirver.net/blog/2012/01/08/second-episode-of-ultisnips-screencast/) Ruby snippets (from procure gem) ```vim global !p def upperfirst(t): if len(t) < 2: return '' if len(t) < 1 else t.capitalize() return t[0].capitalize() + t[1:] def lowerdash(t): return '-'.join([ w.lower() for w in re.findall('[a-z]+|[A-Z]+[a-z]*', t) ]) def snake(t): return '_'.join([ w.lower() for w in re.findall('[a-z]+|[A-Z]+[a-z]*', t) ]) endglobal snippet llc "one line class" class $1; end endsnippet snippet xc "class with include XML::Mapping" class ${1} include XML::Mapping$0 end endsnippet snippet tn "text_node" text_node :$2`!p snip.rv=snake(t[1])`, '$1' endsnippet snippet tno "text_node optional" text_node :$2`!p snip.rv=snake(t[1])`, '$1', optional: true endsnippet snippet opt "optional: true" i , optional: true endsnippet snippet on "object_node" object_node :$2`!p snip.rv=snake(t[1])`, '$1', class: ${3:`!p snip.rv=upperfirst(t[1])`} endsnippet # --- EXAMPLES snippet rc "require package that converts from camelCase or PascalCase to kebab-cased" b const $1 = require('$2`!p snip.rv=lowerdash(t[1])`'); endsnippet snippet imp "import package that converts from camelCase or PascalCase to kebab-cased" b import $1 from '$2`!p snip.rv=lowerdash(t[1])`'; endsnippet ``` yaml.snippets ```vim # --- TYPES snippet ta "type array" description: $1 type: array items: $2 endsnippet snippet to "type object" description: $1 type: object properties: $2 endsnippet snippet ti "type integer" description: $1 type: integer nullable: ${2:false} example: ${3:0} $0 endsnippet snippet tf "type float" description: $1 type: number format: float nullable: false example: ${2:1.23} $0 endsnippet snippet ts "type string" description: $1 type: string nullable: ${2:false} example: "${3:string}" $0 endsnippet snippet tbs "type binary string" description: $1 type: string format: binary nullable: ${2:false} $3 endsnippet snippet tdt "type date-time" description: $1 type: string format: date-time nullable: ${2:false} $0 endsnippet snippet turl "type url" description: $1 type: string format: uri nullable: ${2:false} example: "${3:http://example.com}" $0 endsnippet snippet tb "type boolean" description: $1 type: boolean default: ${2:false} nullable: ${3:false} $0 endsnippet # --- QUERY PARAMETERS snippet parip "parameter integer in path" - name: $1 in: path description: $2 required: true schema: type: integer endsnippet snippet pars "parameter string in query" - name: $1 in: query description: $2 required: ${3:false} schema: type: string endsnippet snippet parsort "parameter for sorting" - name: sort_by in: query description: Сортировка записей по заданному полю required: false schema: type: string enum: [$1] $0 endsnippet snippet parpages "parameter with referenced page and limit" - $ref: "${1:../../swagger.yaml}#/components/parameters/page" - $ref: "$1#/components/parameters/limit" endsnippet snippet parif "parameter with referenced Id-Modified-Since" - $ref: "${1:../../swagger.yaml}#/components/parameters/ifmods" endsnippet snippet parauth "parameter with referenced Authorization" - $ref: "#/components/parameters/auth" endsnippet # --- REFERENCES snippet refc "reference to component" $ref: "${1:../../swagger.yaml}#/components/schemas/$2" endsnippet # --- PATHS snippet pathget "path get" ${1:get}: summary: $2 operationId: `!v expand('%:t:r')` tags: - $3 parameters: responses: "200": description: Успешный запрос content: application/json: schema: "401": $ref: "${4:../../swagger.yaml}#/components/responses/Unauthorized" endsnippet snippet pathpost "path post" post: summary: $1 operationId: ${2:`!v expand('%:t:r')`} tags: - $3 requestBody: required: true content: application/json: schema: type: object properties: $0 responses: "200": description: Успешный запрос content: application/json: schema: "401": $ref: "${4:../../swagger.yaml}#/components/responses/Unauthorized" "422": $ref: "$4#/components/responses/UnprocessableEntity" endsnippet # --- RESPONSES snippet 304 "NotModified response" "404": $ref: "${1:../../swagger.yaml}#/components/responses/NotModified" endsnippet snippet 404 "NotFound response" "404": $ref: "${1:../../swagger.yaml}#/components/responses/NotFound" endsnippet snippet 422 "UnprocessableEntity response" "422": $ref: "${1:../../swagger.yaml}#/components/responses/UnprocessableEntity" endsnippet # --- HEADERS snippet hlast "header Last-Modified" Last-Modified: $ref: "${1:../../swagger.yaml}#/components/headers/Last-Modified" $0 endsnippet snippet hpages "header paginate" X-Total: $ref: "${1:../../swagger.yaml}#/components/headers/X-Total" X-Page: $ref: "$1#/components/headers/X-Page" X-TotalPages: $ref: "$1#/components/headers/X-TotalPages" $0 endsnippet ``` # Syntax highlighting & Themes http://vimcolors.com/ [source](https://www.cyberciti.biz/faq/turn-on-or-off-color-syntax-highlighting-in-vi-or-vim/) Команда | Описание ---|--- `:syntax on` | включение подсветки синтаксиса `:syntax off` | отключение подсветки ## Rails Theme https://github.com/jpo/vim-railscasts-theme ## JS Hightlite https://github.com/jelera/vim-javascript-syntax ## Markdown Highlight [Vim Markdown](https://github.com/plasticboy/vim-markdown) ```vim " --- отсключение folding по умолчанию let g:vim_markdown_folding_disabled = 1 ``` ## Изменение цвета курсора https://stackoverflow.com/questions/34251566/how-can-i-change-the-cursor-style-in-vim-depending-if-im-in-insert-mode-or-norm # Plugins ## Pathogen [Pathogen](https://github.com/tpope/vim-pathogen) - плагин для управления плагинами ```bash # устанавливаем плагин mkdir -p ~/.vim/autoload ~/.vim/bundle && \ curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim # корректируем файл конфигурации vim vim ~/.vimrc ``` Добавляем строки ``` execute pathogen#infect() syntax on filetype plugin indent on ``` Плагины, помещенные в директорию `~/.vim/bundle` будут активироваться автоматически. Пример загрузки плагина [vim-sensible](https://github.com/tomlion/vim-solidity/) ```bash cd ~/.vim/bundle && \ git clone https://github.com/tpope/vim-sensible.git ``` # Troubleshooting ## Не работает цветовая схема в tmux Решение https://stackoverflow.com/questions/10158508/lose-vim-colorscheme-in-tmux-mode Создаем или редактируем файл конфигурации tmux ```bash # ~/.tmux.conf set -g default-terminal "xterm-256color" ``` ## Ошибки при старте vim-config на новом сервере ```bash vim . ... line 28: E474: Invalid argument: listchars=tab:>·,trail:~,extends:>,precedes:<,space:. ``` Возможно установлена некорректная локаль в ОС. Открываем файл *~/.vim-config/vimrc* и кириллица будет нарушена. Решение: ```bash # --- текущая локаль locale # --- доступные локали locale -a # --- генерация новой (если нет ru_RU.UTF-8) sudo locale-gen ru_RU.UTF-8 # --- устанавливаем текущую sudo update-locale LANG=ru_RU.UTF-8 ``` ## Error detected while processing .vimrc: Чаще всего на новом сервере при первом запуске `vim` видим нечто подобное: ```bash Error detected while processing /home/zoid/.vimrc: line 22: E474: Invalid argument: listchars=tab:>·,trail:~,extends:>,precedes:<,space:. Press ENTER or type command to continue ``` При этом в открытом файле наблюдаем нарушение отображения некоторых символов. Этом может быть связано с тем, что на сервере не установлена русская локаль: ```bash sudo locale LANG=en_US ... sudo locale -a | grep ru # ничего не выводится ``` Решение: https://vps.ua/wiki/setting-russian-locale-linux/ ```bash sudo apt-get install language-pack-ru sudo vim /etc/default/locale # заменяем содержимое на LANGUAGE=ru_RU:ru LANG=ru_RU.UTF-8 ``` ## Буфер обмена ### Ubuntu По-умолчанию vim не поддерживает работу с системным буфером обмена. Для работы с ним необходимо установить `vim-gnome` вместо `vim`. [источник](https://stackoverflow.com/a/51186812/4498602) ```bash # проверяем поддержку # -xterm_clipboard - не поддерживается # +xterm_clipboard - поддерживается vim --version | grep .xterm_clipboard -o # удаляем "старый" vim sudo apt-get purge vim sudo apt-get autoremove # устанавливаем "новый" sudo apt-get install vim-gtk3 ``` Комбинации клавиш `"+y` - копирование в буфер `"+d` - вырезание в буфер `"+p` - вставка из буфера ### WSL https://www.reddit.com/r/bashonubuntuonwindows/comments/be2q3l/how_do_i_copy_whole_text_from_vim_to_clipboard_at/el2vx7u/?utm_source=share&utm_medium=web2x ```vim " WSL yank support let s:clip = '/mnt/c/Windows/System32/clip.exe' " change this path according to your mount point if executable(s:clip) augroup WSLYank autocmd! autocmd TextYankPost * if v:event.operator ==# 'y' | call system(s:clip, @0) | endif augroup END endif ``` ## "Зависание" vim [Stackoverflow](https://stackoverflow.com/questions/3419820/sometimes-my-file-just-freezes-in-my-vi-vim-what-happened) В произвольный момент vim "зависает" - перестает отвечать на команды. Причиной тому может служить комбинация `Ctrl+S` Лечение - `Ctrl-Q`
