100 команд vim, которые должен знать каждый программист

Небольшая подсказка по 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 Установить режим подсветки

Система Orphus

 


 

Comments: 16

  1. cheaTTer October 2nd, 2009 at 5:46 am

    Спасибо, полезно

  2. vldmr October 2nd, 2009 at 8:14 am

    Спасибо.

    К разделу “Взаимодействие с ОС” я бы добавил:
    :. w !sh
    Выполнить текущую строку как команду оболочки (#n строку, если `.’ заменить на n)

  3. Flycat October 2nd, 2009 at 10:00 am

    Я бы ещё вставил
    :r!command
    Выполнить команду и вставить результат после текущей строки

    Или это тоже “:wq”?

  4. Alexander Artemenko October 2nd, 2009 at 10:10 am

    Клево! Только при чем здесь “программист”? Это должен знать каждый, кто пользуется вимом.

    Прекрасное дополнение к скринкастам Дерека http://vimeo.com/user1690209/videos

  5. Ivan October 2nd, 2009 at 10:18 am

    Спасибо, много полезного.
    К поиску я бы добавил:
    /word - по умолчанию ищет регистро-зависимо, /\cword - регистро-независимо.
    * - искать слово под курсором (например, если курсор стоит на слове xml, выполнится поиск /\).
    # - тоже самое, только backward.

    А также
    q1 - начать запись макроса, который будет помещён в 1; q - закончить запись макроса; @1 - выполнить макрос из 1.

    Ну и на всякий случай:
    J - присоединить следующую строку к текущей.
    dd - удалить всю строку.
    daw - удалить слово под курсором.

  6. Alexander Artemenko October 2nd, 2009 at 10:31 am

    Команда “Убрать все пробелы” на самом деле убирает все _висячие_ пробелы.

    Команда :grep expression *.php на самом деле будет искать по тексту файлов с расширением .php

    Раздел про выравнивание я бы выкинул вовсе и заменил на объяснение, как использовать знак =. Например:

    gg=G — отформатировать весь файл, просто = в Visual Mode, форматирует выделенный кусок текста.

  7. Андрей October 2nd, 2009 at 11:46 am

    :%s/old/new/gw?
    может :%s/old/new/gc?

  8. boombick October 2nd, 2009 at 12:44 pm

    Всем большое спасибо, поправки будут внесены в ближайшее время :)

  9. Макс October 2nd, 2009 at 3:13 pm

    > ggVGg? Преобразовать текст в Rot13
    неужели так часто используется ?

    еще вот полезная ссылка http://imgur.com/xrLAk.png помогающая понять vim

  10. kylichuku October 2nd, 2009 at 4:16 pm

    http://rayninfo.co.uk/vimtips.html - вимосвалка побольше

  11. Arty October 8th, 2009 at 8:35 am

    И когда ожидать внесённых поправок?
    Хочется уже распечатать сей манускрипт и под ламинат :)

  12. boombick October 8th, 2009 at 2:29 pm

    Сегодня вечером сделаю :)

  13. Dmitry October 10th, 2009 at 8:09 pm

    Спасибо!
    Вместо :%s#>[^##g должно быть :%s#<[^##g вроде

  14. Dmitry October 10th, 2009 at 8:11 pm

    Вместо :%s#>[^<]\+>##g - :%s#<[^<]\+>##g, глупая автозаменялка!

  15. _Andrey_ November 30th, 2009 at 9:21 pm

    Спасибо. Давно пользуюсь VIM, но до сих пор не все возможности изучил.

    Поясните, что такое “Преобразовать текст в Rot13″ и зачем оно нужно? Желательно из личного примера, а не надуманного.

  16. boombick November 30th, 2009 at 9:40 pm

    http://ru.wikipedia.org/wiki/ROT13 - тут все написано :) Прямо-таки “реального” применения я придумать не могу, сам сталкивался раз или два в жизни и то как-то вскользь. Просто полезно знать, что вим это умеет =)

Add a Comment