Небольшая подсказка по vim, будет полезна всем, я думаю. Это не руководство для начинающих (т.е. команд типа :wq здесь нет)
Комментарии приветствуются :)
Поиск
| /word |
Искать слово “word” сверху вниз |
| ?word |
Искать слово “word” снизу вверх |
| /jo[ha]n> |
Искать “john” или “joan” |
| /\< the |
Искать слова, начинающееся на “the” |
| /the\> |
Искать слова, заканчивающиеся на “the” |
| /\< the\> |
Искать “the” |
| /\< …. \> |
Искать слова из четырех символов |
| /fred\|joe |
Искать “fred” или “joe” |
| /\<\d\d\d\d\> |
Искать 4 цифры подряд |
| /^\n\{3} |
Искать 3 пустые строки |
| :bufdo /searchstr/ |
Искать во всех открытых файлах |
Замена
| :%s/old/new/g |
Заменить все вхождения “old” на “new” |
| :%s/old/new/gw |
Заменить все вхождения “old” на “new” с запросом подтверждения |
| :2,35s/old/new/g |
Заменить все вхождения “old” на “new” между 2 и 35 строками |
| :5,$s/old/new/g |
Заменить все вхождения “old” на “new” начиная с 5 строки и до конца файла |
| :%s/^/hello/g |
Добавить “hello” в начало каждой строки |
| :%s/$/Harry/g |
Добавить “Harry” в конец каждой строки |
| :%s/onward/forward/gi |
Заменить “onward” на “forward” с учетом регистра |
| :%s/ *$//g |
Убрать все пробелы |
| :g/string/d |
Удалить все строки, содержащие “string” |
| :v/string/d |
Удалить все строки, не содержащие “string” |
| :s/Bill/Steve/ |
Заменить первое вхождение “Bill” на “Steve” в текущей строке |
| :s/Bill/Steve/g |
Заменить все вхождения “Bill” на “Steve” в текущей строке |
| :%s/\r//g |
Убрать символ возврата каретки (Такие тексты обычно приходят от windows-пользователей) |
| :%s#>[^<]\+>##g |
Очистить текст от HTML-тегов |
| :%s/^\(.*\)\n\1$/\1/ |
Удалить строки, повторяющиеся дважды |
| Ctrl+a |
Увеличить число под курсором на единицу |
| Ctrl+x |
Уменьшить число под курсором на единицу |
| ggVGg? |
Преобразовать текст в Rot13 |
Регистр
| Vu |
Перевести строку в нижний регистр |
| VU |
Перевести строку в верхний регистр |
| g~~ |
Инвертировать регистр |
| vEU |
Перевести слово под курсором в верхний регистр |
| vE~ |
Инвертировать регистр слова |
| ggguG |
Перевести весь текст в нижний регистр |
| :set ignorecase |
Регистронезависимый поиск |
| :set smartcase |
Игнорировать регистр при поиске, если в искомом выражении нет символов верхнего регистра |
| :%s/\<./\u&/g |
Перевести первую букву каждого слова в верхний регистр |
| :%s/\<./\l&/g |
Перевести первую букву каждого слова в нижний регистр |
| :%s/.*/\u& |
Перевести первую букву первого слова в каждой строке в верхний регистр |
| :%s/.*/\l& |
Перевести первую букву первого слова в каждой строке в нижний регистр |
Чтение/запись файлов
| :1,10 w outfile |
Записать в outfile с первой по десятую строки |
| :1,10 w >> outfile |
Добавить в outfile с первой по десятую строки |
| :r infile |
Вставить содержимое файла infile |
| :23r infile |
Вставить содержимое файла infile после 23 строки |
Навигация по ФС
| :e . |
Открыть встроенный файл-менеджер |
| :Sex |
Разбить окно и открыть встроенный файл менеджер |
| :browse e |
Графический файл-менеджер |
| :ls |
Список буферов |
| :cd .. |
Перейти в родительскую директорию |
| :args |
Список открытых файлов |
| :args *.php |
Открыть все файлы с расширением *.php |
| :grep expression *.php |
Показать список файлов с расширением php, содержащих в имени expression |
| gf |
Открыть файл с именем, равным слову, находящемуся под курсором |
Взаимодействие с ОС
| :!pwd |
Выполнить команду pwd и вернуться |
| !!pwd |
Выполнить команду pwd и вставить результат в редактор |
| :sh |
Открыть шелл |
| $exit |
Вернуться в редактор из шелла |
Выравнивание
| :%!fmt |
Выровнять все строки |
| !}fmt |
Выровнять все строки в текущей позиции |
| 5!!fmt |
Выровнять следующие 5 строк |
Вкладки
| :tabnew |
Создать новую вкладку |
| gt |
Перейти на следующую вкладку |
| :tabfirst |
Перейти на первую вкладку |
| :tablast |
Перейти на последнюю вкладку |
| :tabm n(position) |
Изменить порядок вкладок |
| :tabdo %s/foo/bar/g |
Выполнить команду во всех вкладках |
| :tab ball |
Поместить все открытые файлы во вкладки |
Разделение окна
| :e filename |
Редактировать filename в текущем окне |
| :split filename |
Разделить окно и открыть filename |
| ctrl-w + стрелка ВВЕРХ |
Переместить курсор в верхнее окно |
| ctrl-w ctrl-w |
Переместить курсор в следующее окно |
| ctrl-w_ |
Максимизировать текущее окно |
| ctrl-w= |
Подогнать окна по размеру |
| 10 ctrl-w+ |
Увеличить текущее окно на 10 строк |
| :vsplit file |
Вертикально разделить окно |
| :sview file |
Разделить окно и открыть file только для чтения |
| :hide |
Закрыть текущее окно |
| :only |
Закрыть все окна, кроме текущего |
| :b 2 |
Открыть #2 в текущем окне |
Автодополнение
| Ctrl+n Ctrl+p (в режиме вставки) |
Дополнить слово |
| Ctrl+x Ctrl+l |
Дополнить строку |
| :set dictionary=dict |
Установить словарь |
| Ctrl+x Ctrl+k |
Дополнение из словаря |
Метки
| mk |
Пометить текущую позиция как k |
| ‘k |
Перейти к метке k |
| d’k |
Удалить все до метки k |
Сокращения
| :ab mail mail@provider.org |
Определить mail как сокращение от mail@provider.org |
Отступы
| :set autoindent |
Включить автоматическую расстановку отступов |
| :set smartindent |
Включить “умную” расстановку отступов |
| :set shiftwidth=4 |
Установить отступ равный 4 пробелам |
| ctrl-t, ctrl-d |
Убрать/добавить отступ в режиме вставки |
| << |
Добавить отступ |
| >> |
Убрать отступ |
Подсветка синтаксиса
| :syntax on |
Включить подсветку |
| :syntax off |
Выключить подсветку |
| :set syntax=perl |
Установить режим подсветки |
Спасибо, полезно
Спасибо.
К разделу “Взаимодействие с ОС” я бы добавил:
:. w !sh
Выполнить текущую строку как команду оболочки (#n строку, если `.’ заменить на n)
Я бы ещё вставил
:r!command
Выполнить команду и вставить результат после текущей строки
Или это тоже “:wq”?
Клево! Только при чем здесь “программист”? Это должен знать каждый, кто пользуется вимом.
Прекрасное дополнение к скринкастам Дерека http://vimeo.com/user1690209/videos
Спасибо, много полезного.
К поиску я бы добавил:
/word - по умолчанию ищет регистро-зависимо, /\cword - регистро-независимо.
* - искать слово под курсором (например, если курсор стоит на слове xml, выполнится поиск /\).
# - тоже самое, только backward.
А также
q1 - начать запись макроса, который будет помещён в 1; q - закончить запись макроса; @1 - выполнить макрос из 1.
Ну и на всякий случай:
J - присоединить следующую строку к текущей.
dd - удалить всю строку.
daw - удалить слово под курсором.
Команда “Убрать все пробелы” на самом деле убирает все _висячие_ пробелы.
Команда :grep expression *.php на самом деле будет искать по тексту файлов с расширением .php
Раздел про выравнивание я бы выкинул вовсе и заменил на объяснение, как использовать знак =. Например:
gg=G — отформатировать весь файл, просто = в Visual Mode, форматирует выделенный кусок текста.
:%s/old/new/gw?
может :%s/old/new/gc?
Всем большое спасибо, поправки будут внесены в ближайшее время :)
> ggVGg? Преобразовать текст в Rot13
неужели так часто используется ?
еще вот полезная ссылка http://imgur.com/xrLAk.png помогающая понять vim
http://rayninfo.co.uk/vimtips.html - вимосвалка побольше
И когда ожидать внесённых поправок?
Хочется уже распечатать сей манускрипт и под ламинат :)
Сегодня вечером сделаю :)
Спасибо!
Вместо :%s#>[^##g должно быть :%s#<[^##g вроде
Вместо :%s#>[^<]\+>##g - :%s#<[^<]\+>##g, глупая автозаменялка!
Спасибо. Давно пользуюсь VIM, но до сих пор не все возможности изучил.
Поясните, что такое “Преобразовать текст в Rot13″ и зачем оно нужно? Желательно из личного примера, а не надуманного.
http://ru.wikipedia.org/wiki/ROT13 - тут все написано :) Прямо-таки “реального” применения я придумать не могу, сам сталкивался раз или два в жизни и то как-то вскользь. Просто полезно знать, что вим это умеет =)