Полезные советы для VIM #4

Продолжение серии небольших заметок о vim'e, предпоследняя, третья заметка, находиться тут.

Для начала, песня про VIM от фанатов - Vim Theme Song.

Перемещение по тексту

Наглядная картинка по перемещению по тексту

VIM tips

g; - переход между последними изменениями, g, - в обратном порядке

gi - установить курсор на место последнего редактирования и перейти в режим редактирования

46 | - перейти на колонку 46

gj, gk - построчное перемещение в длиной строке с включенным wrap

zz - переместить курсор к центру экрана

Поиск и замена

[I - вывод списка найденных совпадений при поиске

2f/ - найти второй символ / в строке

:[range]g/{pattern}/[cmd] - выполнить команду cmd на строках, которые совпадают с pattern внутри диапазона range

:[range]v/{pattern}/[cmd] - выполнить команду cmd на строках, которые не совпадают с pattern внутри диапазона range

:g/foo/d - удалить все строки, содержащие "foo"

:g!/foo/d - удалить все строки, не содержащие "foo"

:g//d — удалить строки, содержащие подсвеченное значение

:g!//d — удалить строки, не содержащие подсвеченного значения

:g/^\s*$/d - удалить все пустые строки

:g/foo/s/^/#/g - комментировать строки содержащие подстроку foo

:g/pattern - вывести строки совпавшие с pattern

:g/foo/t$ — скопировать строки, содержащие foo в конец файла

Больше про возможности g можно почитать на Power of g.

:s/foo/bar/n - подсчет количества замен, сам процесс замены не происходит

:%s//foo/igc - заменить шаблон из последнего поиска на foo

:%s/^\n\+/\r/ - сжатие нескольких пустых строк в одну

Быстрое формирование шаблона на поиск из слова под курсором, активируется с помощью ;

nmap ; :%s/\<<c-r>=expand("<cword>")<cr<\>/

Разное

ctrl-r=2*2 - вычисление выражения и вставка результата на место курсора

:x - быстрая замена для :wq, сохранение и выход

:wa - сохранение всех файлов

:xa - сохранение всех файлов и выход

:lcd ~/temp - изменение рабочей директории для текущего буфера

:cd %:h - изменение рабочей директории на директорию открытого файла

:set autochdir - автоматическое изменение рабочей директории для текущего буфера при открытии нового файла

:r [file] - вставить содержимое файла file начиная с позиции курсора

q: - список недавних команд с возможность редактирования и повторного исполнения

:%!xmllint --format - - форматирование xml-файла и возврат результата в текущий буфер

:map <leader> - список всех команд назначенных на префикс <leader>

Просмотр календарей на 2012, 2013 года рядом

vim -O <(cal 2011) <(cal 2012) 

Подсветка слова python в красный цвет

highlight RedString ctermbg=red guibg=red
match RedString /python/

Загрузка локального конфига (если такой существует)

if filereadable(glob("~/.vimrc.local")) 
    source ~/.vimrc.local
endif

Управление плагинами

У себя я управляю плагинами с помощью pathogen и git submodule. Первый подгружает в vim-среду плагины из ~/.vim/bundle, а второй отвечает за обновление и управление тем, что лежит в bundle.

Добавление нового плагина

cd ~/reps/dotfiles
git submodule add https://github.com/vim-scripts/matchit.zip.git .vim/bundle/matchit

У меня ~/.vim симлинк на ~/reps/dotfiles/.vim/

Если склонирован проект с уже прописанными git modules, то вместо git submodule add нужно выполнить

git submodule init
git submodule update

Обновления я делаю вручную с помощью такого алиаса

alias vimup="cd ~/reps/dotfiles; git submodule foreach git pull origin master"

Процесс удаления плагина менее приятный (предполагаться что текущая директория ~/reps/dotfiles):

  1. Удалить записи о модуле из файла .gitmodules
  2. Удалить записи о модуле из файла .git/config
  3. Выполнить git rm --cached .vim/bundle/matchit
  4. Удалить файлы rm .vim/bundle/matchit
  5. Закомитить правки

Плагины

  • vim-rooter - изменение рабочей директории для открытого файла на директорию проекта
  • syntastic - проверка синтаксиса для многих языков программирования и разметки
  • tabman.vim - быстрое перемещение между открытыми табами и окнами
  • conque-shell - запуск шелла внутри окна vim
  • rainbow_parentheses.vim - подсвечивание скобок разного уровня
  • taboo.vim - гибкая настройка названий табов
  • Powerline - мега-расширение для статусной строки
  • vimtips-fortune - вывод советов по vim при каждом запуске
  • auto-pairs - управление парными скобками
  • vim-hybrid - тема-гибрид Jellybeans, Solarized и Tomorrow Night
  • ctrlp - удобный поиск по файлам, буферам, недавно используемым файлам
  • MatchTag - подсвечивание парного тега
  • vim-snipmate + набор снипетов - снипеты

Writing Vim Plugins

VIM и Python

python-mode - удобный комплект для работы с python-кодом: перемещение между лексемами, рефакторинг и т.д.

jedi-vim - наверное один из самых удобных механизмов автодополнений для разных языков, в частности, для python тоже

nose.vim - скрещиваем vim и nose, подробнее

Vdebug - попытка скрестить отладку в python и vim

VIM и Django

  • vim-virtualenv - работа с virtualenv из под vim;
  • vim-htmldjango_omnicomplete - автодополнение для тегов, фильтров и переменныж в шаблонах;
  • vim-django - управление django-проектом (через команды manage.py) из под vim;
  • ViMango, djangojump - быстрое открытие файлов из urls, views, templates (подробности по ссылке);

VIM и GIT

vim-fugitive - обертка для git, видеокасты можно посмотреть на vimcasts.

vim-extradite - обертка над git log, дополнение к vim-fugitive.

Познавательный материал по VIM

blog comments powered by Disqus