Продолжение серии небольших заметок о vim'e, предпоследняя, третья заметка, находиться тут.
Для начала, песня про VIM от фанатов - Vim Theme Song.
Перемещение по тексту
Наглядная картинка по перемещению по тексту
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):
Плагины
VIM и Python
python-mode - удобный комплект для работы с python-кодом: перемещение между лексемами, рефакторинг и т.д.
jedi-vim - наверное один из самых удобных механизмов автодополнений для разных языков, в частности, для python тоже
nose.vim - скрещиваем vim и nose, подробнее
Vdebug - попытка скрестить отладку в python и vim
VIM и Django
VIM и GIT
vim-fugitive - обертка для git, видеокасты можно посмотреть на vimcasts.
vim-extradite - обертка над git log, дополнение к vim-fugitive.
Познавательный материал по VIM