====== VIM ======
===== Плагины =====
**[[http://vimawesome.com/|Каталог плагинов]]**
- [[https://github.com/mozilla/doctorjs|DoctorJS]] - предоставляет jsctags, необходимо поставить патч для совместимости с nodejs-0.10 ([[https://github.com/mozilla/doctorjs/pull/54|подробности]])
- [[https://github.com/majutsushi/tagbar|TagBar]]
- Проверка синтаксиса
- [[https://github.com/scrooloose/syntastic|Универасальный плагин syntastic для всех типов]]
- [[https://github.com/Shutnik/jshint2.vim|Валидатор JavaScript для vim]] ([[http://www.jshint.com/|jshint]])
- [[https://github.com/joonty/vim-phpqa|Валидатор кода для php]]
- [[https://github.com/ciaranm/detectindent|DetectIndent]] --- плагин для автоматического определения стилей отступов в файлах (expandtab, tabstop, shiftwidth) [[#определение_стиля_отступов|подробности]]
- [[https://github.com/xolox/vim-shell|vim-shell]] --- плагин для выполнения внешних команд [[#фоновое_выполнение_команд|подробности]]
- [[https://github.com/amiorin/vim-project|vim-project]] --- плагин для работы с проектами. Предоставляет стартовый экран, выполнение функций при открытии проектов (например, догрузку vim-скрипта для проекта)
- [[https://github.com/mhinz/vim-startify|vim-startify]] --- ещё один стартовый экран (закладки, сессии и т.п.)
- [[https://github.com/jiangmiao/auto-pairs|Auto Pairs]] --- автоматическая вставка парных символов (скобки, кавычки и т.п.)
- [[https://ctags.io/|Universal Tags]] --- продолжение ctags ([[https://github.com/universal-ctags/ctags|github]])
===== JavaScript IDE =====
==== Индексирование ====
Индексирование с помощью DoctorJS (jsctags):
jsctags -f tags *.js
==== Валидация кода ====
Можно сделать с помощью [[http://www.jshint.com/|jshint]] ([[https://github.com/Shutnik/jshint2.vim|плагин для vim]])
Для автоматической проверки файла при сохранении добавьте строчку в ваш ~/.vimrc:
let jshint2_save = 1
==== Сниппеты ====
Для использования сниппетов установите плагин [[https://github.com/garbas/vim-snipmate|snipMate]]. [[public:pavel:develop:vim:snippets:javascript|Здесь]] доступны мои сниппеты. Дополнительно к стандартным есть вспомогательные для создания документирующих комментариев для [[https://github.com/senchalabs/jsduck|JSDuck]], описания модулей и классов для [[http://requirejs.org/|RequireJS]].
===== PHP IDE =====
==== Индексирование ====
Индексирование с помощью ctags-exuberant:
Пример индексирования:
ctags-exuberant -f tags -h \".php\" -R --exclude=\"\.svn\" --totals=yes \
--tag-relative=yes --PHP-kinds=+cf --regex-PHP='/abstract class ([^ ]*)/\1/c/' \
--regex-PHP='/interface ([^ ]*)/\1/c/' \
--regex-PHP='/(public |static |abstract |protected |private )+function ([^ (]*)/\2/f/'
==== Валидация кода ====
[[https://github.com/joonty/vim-phpqa|PHP QA Tools]]
Валидация будет выполняться при сохранении и по команде '':Php''
Для проверки только синтаксиса надо добавить в ваш .vimrc следующие строчки:
" PHP QA Tools {{{1
let g:phpqa_messdetector_autorun = 0
let g:phpqa_codesniffer_autorun = 0
let g:phpqa_codecoverage_autorun = 0
" 1}}}
==== Улучшение поддержки формата ====
Для упрощения работы с многострочными комментариями добавьте в свой ftplugin/php.vim следующие строчки:
setlocal comments=sO:*\ -,mO:*\ \ ,exO:*/,s1:/*,mb:*,ex:*/,://
setlocal formatoptions-=t formatoptions+=croql
(скопировано из ftplugin/javascript.vim)
Так при начале новой строки в многострочном комментарии будет автоматически вставлен символ "*".
===== Управление проектами =====
Полезные плагины для работы с проектами:
* NERD Tree — список файлов
* [[https://github.com/jistr/vim-nerdtree-tabs|NERD Tree Tabs]] — автоматическое открытие списка файлов
* bufexplorer — список буферов
===== Проверка синтаксиса =====
Для проверки синтаксиса можно использовать специальные плагины для конкретных языков (например, [[https://apps.gnedov.info/wiki/doku.php?id=public:pavel:develop:vimвалидация_кода1|для PHP]] и [[https://apps.gnedov.info/wiki/doku.php?id=public:pavel:develop:vimвалидация_кода|для JavaScript]]), либо универсальный плагин [[https://github.com/scrooloose/syntastic|syntastic]].
Syntastic выполняет проверку синтаксиса при сохранении файла. Строчки с ошибками выделяются в колонке с номерами строк. Список ошибок можно получить с помощью команды '':Errors''.
Syntastic поддерживается расширенной статусной строкой [[https://github.com/bling/vim-airline|vim-airline]], показывающей уведомление при наличии ошибок.
===== Хитрушки VIM-а =====
==== Пробельные символы в конце строк ====
Автоматическое удаление пробельных символов в конце строк при сохранении:
autocmd BufWritePre * :%s/\s\+$//e
==== Использование нескольких индексных файлов ====
Например для файлов ''tags-php'' и ''tags-js'' в корне проекта
set tags=./tags-php,tags-php;./tags-js,tags-js;
==== Определение стиля отступов ====
Можно добавлять в конец камент:
/* vim: set noet ts=4 sw=4: */
или:
/* ex:ts=4:sw=4:noet:foldmethod=marker */
Или воспользоваться плагином [[https://github.com/ciaranm/detectindent|DetectIndent]] для автоматического определения стиля отступов. Можно ставить в pathogen. В свой ''~/.vimrc'' добавляю параметры:
" Предпочтительные параметры:
let g:detectindent_preferred_expandtab = 0
let g:detectindent_preferred_indent = 4
let g:detectindent_max_lines_to_analyse = 256
" Выполнение команды DetectIndent для исходников javascript
autocmd FileType javascript :DetectIndent
==== Фоновое выполнение команд ====
Для фонового выполнения команд есть удобный плагин [[https://github.com/xolox/vim-shell|vim-shell]]. Для "vim-shell" требуется дополнительно ставить [[https://github.com/xolox/vim-misc|vim-misc]] от того же автора.
Пример выполнения фоновой команды:
:call xolox#misc#os#exec({'command': 'make project', 'async':1})
Я использую для выполнения скрипта обновления документации при сохранении исходника:
autocmd BufWritePost *.js call xolox#misc#os#exec({'command': './update-client-doc.sh', 'async':1})
autocmd BufWritePost *.php call xolox#misc#os#exec({'command': './update-server-doc.sh', 'async':1})
==== Загрузка скриптов vim-а с проверкой существования файла ====
Использую для загрузки вспомогательного конфига с перечнем проектов
if filereadable(expand("~/.vimrc.projects"))
so ~/.vimrc.projects
endif
==== Регулярные выражения ====
=== Начало текста в строках ===
Допустим, есть текст:
aaa
bbb
ccc
ddd
Хотим получить:
ggg.aaa
ggg.bbb
ggg.ccc
ggg.ddd
Варианты решения:
:%s/\v(\s|^)@<=(\w)@=/ggg./
:%s/\v
==== Сортировка строчек ====
Запись всех строчек файла в обратном порядке. Можно сделать с помощью команды "tac":
:.!tac %
===== Основы =====
==== Copy&paste ====
- Выделяем текст для копирования
- Нажимаем на клавишу ''d'' чтобы вырезать или ''y'' чтобы скопировать
- Перемещаемся на место вставки
- Нажимаем на клавишу ''p'' (после курсора) или ''P'' (до курсора)
Чтобы обратиться к какому-то конкретному регистру надо жать ''"'', где вместо '''' можно указывать цифру или букву. Так будет выглядеть копирование и вставка через регистр ''a'':
* ''"ay'' --- копирование в регистр ''a''
* ''"ap'' --- вставка из регистра ''a''
В качестве системного буфера обмена выступает регистр ''+''
Чтобы вставить в командную строку vim-а надо нажимать ''"ap'', где '''' --- позволяет выполнять команды в командной строке vim-а, затем пойдёт обычная команда из нормального режима, ''"a'' --- обращение к регистру //a//, ''p'' --- вставка.
==== Макросы ====
Начать запись макроса можно с помощью: ''q'', где вместо '''' какая-нибудь буква или цифра. Например, ''qa'' --- начнёт запись макроса в регистр //a//. Теперь все выполняемые действия будут записаны в макрос. Чтобы прекратить запись надо в нормальном режиме нажать ''a''.
Чтобы выполнить макрос жмём ''@'', например ''@a'' --- выполнит макрос записанный в регистр //a//.
===== Help =====
Синтаксис поиска описания комбинаций клавиш: '':help i_CTRL-P'' --- где ''i'' - режим, ''CTRL-P'' - комбинация. Другой пример: '':help i_CTRL-X_CTRL_O''
===== Neovim GUI =====
#!/usr/bin/env node
var proc = require('child_process');
var args = process.argv.concat([]);
args.splice( 0, 2 );
args.unshift( 'nvim' );
var nvimCmd = args.join(' ');
var termCmd = 'xfce4-terminal --command="' + nvimCmd + '"';
proc.execSync(termCmd);