Это старая версия документа!
Содержание
VIM
Плагины
- DoctorJS - предоставляет jsctags, необходимо поставить патч для совместимости с nodejs-0.10 (подробности)
- Проверка синтаксиса
- DetectIndent — плагин для автоматического определения стилей отступов в файлах (expandtab, tabstop, shiftwidth) подробности
- vim-shell — плагин для выполнения внешних команд подробности
- vim-project — плагин для работы с проектами. Предоставляет стартовый экран, выполнение функций при открытии проектов (например, догрузку vim-скрипта для проекта)
- vim-startify — ещё один стартовый экран (закладки, сессии и т.п.)
- Auto Pairs — автоматическая вставка парных символов (скобки, кавычки и т.п.)
- Universal Tags — продолжение ctags (github)
JavaScript IDE
Индексирование
Индексирование с помощью DoctorJS (jsctags):
jsctags -f tags *.js
Валидация кода
Можно сделать с помощью jshint (плагин для vim)
Для автоматической проверки файла при сохранении добавьте строчку в ваш ~/.vimrc:
let jshint2_save = 1
Сниппеты
Для использования сниппетов установите плагин snipMate. Здесь доступны мои сниппеты. Дополнительно к стандартным есть вспомогательные для создания документирующих комментариев для JSDuck, описания модулей и классов для 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/'
Валидация кода
Валидация будет выполняться при сохранении и по команде :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 — список файлов
- NERD Tree Tabs — автоматическое открытие списка файлов
- bufexplorer — список буферов
Проверка синтаксиса
Для проверки синтаксиса можно использовать специальные плагины для конкретных языков (например, для PHP и для JavaScript), либо универсальный плагин syntastic.
Syntastic выполняет проверку синтаксиса при сохранении файла. Строчки с ошибками выделяются в колонке с номерами строк. Список ошибок можно получить с помощью команды :Errors.
Syntastic поддерживается расширенной статусной строкой 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 */
Или воспользоваться плагином 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
Фоновое выполнение команд
Для фонового выполнения команд есть удобный плагин vim-shell. Для «vim-shell» требуется дополнительно ставить 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</ggg./
Сортировка строчек
Запись всех строчек файла в обратном порядке. Можно сделать с помощью команды «tac»:
:.!tac %
Основы
Copy&paste
- Выделяем текст для копирования
- Нажимаем на клавишу
dчтобы вырезать илиyчтобы скопировать - Перемещаемся на место вставки
- Нажимаем на клавишу
p(после курсора) илиP(до курсора)
Чтобы обратиться к какому-то конкретному регистру надо жать "<register>, где вместо <register> можно указывать цифру или букву. Так будет выглядеть копирование и вставка через регистр a:
"ay— копирование в регистрa"ap— вставка из регистраa
В качестве системного буфера обмена выступает регистр +
Чтобы вставить в командную строку vim-а надо нажимать <ctrl+r>"ap, где <ctrl+r> — позволяет выполнять команды в командной строке vim-а, затем пойдёт обычная команда из нормального режима, "a — обращение к регистру a, p — вставка.
Макросы
Начать запись макроса можно с помощью: q<register>, где вместо <register> какая-нибудь буква или цифра. Например, qa — начнёт запись макроса в регистр 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);
