====== 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);