Продолжение серии небольших заметок о 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