Skip to content


Полезные приёмы работы в VIM

Текстовый редактор vi имеет два режима работы: в первом он пищит, а во втором — всё портит.

VIM - это отличный текстовый редактор, изначально заточенный под программистов. Позволяет делать с текстом всё что угодно. В этом посте я буду собирать различные фишки VIM-а, которые сам использую.

  1. Сдвиг вертикального блока вправо: жмём Ctrl-V, выделяем стрелками вертикальный блок, потом жмём >, в результате весь выделенный текст сдвигается на shiftwidth символов вправо. В моём конфигурационном файле ~/.vimrc стоит set shiftwidth=2. Если нужно сдвинуть на большее расстояние, то перед > следует еще ввести цифру, что, как обычно в VIM-е, приведёт к повторению команды заданное число раз. Например, для сдвига блока из 3-х строк начиная с текущей на 6 символов вправо, в моём случае нужно будет набрать на клавиатуре последовательность Ctrl-V ↓ ↓ 3>
  2. Часто когда в VIM производится вставка куска текста с длинными строками (например, вывод tcpdump), VIM автоматически переносит те слова на следующую строку, которые находятся за пределами максимальной длины строки. Чтобы этого не происходило, нужно в командном режиме набрать :set paste
  3. При написании программного кода для отступов почти всегда используется кнопка Tab. Но если над кодом работает более одного человека, могут возникнуть неудобства, связанные с тем, что у них разные настройки редакторов, и, возможно, даже разные редакторы, в результате чего символы табуляции по разному отображаются. Для повышения переносимости VIM можно настроить так, чтобы при нажатии кнопки Tab вместо символа табуляции на самом деле вставлялось заданное количество пробелов. Для этого в командном режиме нужно сказать :set expandtab (или добавить в ~/.vimrc set expandtab). А собственно количество пробелов регулируется параметром tabstop. Например, чтобы при нажатии клавиши Tab вставлялось 4 пробела, нужно в командном режиме набрать :set tabstop=4. Но включение опции expandtab никак не влияет на те символы табуляции, которые появились в тексте до её включения. Заменить все существующие в документе символы табуляции на пробелы можно с помощью команды :retab. Чтобы вставить настоящий символ табуляции когда включена опция expandtab, нужно набрать на клавиатуре комбинацию Ctrl-V Tab. Можно также задать разный режим работы клавиши Tab для разных типов файлов. Например, чтобы заменять табуляции на пробелы только для файлов с PHP-кодом, нужно добавить в ~/.vimrc следующее:
    autocmd FileType * set tabstop=2|set shiftwidth=2|set noexpandtab
    autocmd FileType php set tabstop=4|set shiftwidth=4|set expandtab
  4. Макросы позволяют ускорить выполнение часто используемых операций. Для их создания есть команда map. Например, чтобы после набора "id" в командном режиме в текст вставлялась текущая дата, нужно в ~/.vimrc добавить строчку:
    map id !!date "+\%Y\%m\%d \%T"^M

    При этом ^M в конце строки должно быть вставлено как esc-последовательность путем ввода комбинации клавиш Ctrl-V Ctrl-M. Восклицательный знак означает выполнение внешней команды ОС из командного интерпретатора.

  5. Для редактирования файлов в кодировке, отличной от текущей кодировки локали, в ~/.vimrc нужно указать кодировку файла следующим образом:
    au BufRead /path/to/old/charset/files/* e ++enc=koi8-r

    В результате при открытии любого файла из директории /path/to/old/charset/files его содержимое будет автоматически перекодировано из KOI8-R в текущую кодировку локали.

  6. Если собираетесь использовать встроенное в vim шифрование, то в .vimrc обязательно стоит добавить явное указание на то, какой именно метод использовать

    set cryptmethod=blowfish2

    поскольку более старые 2 метода (zip и blowfish) уже недостаточно криптостойкие. Подробнее об этом можно почитать здесь и у David Leadbeater. Проверить каким именно методом был зашифрован уже существующий файл можно командой

    head -c 11 somefile.txt
    VimCrypt~03

    Самая последняя цифра в выводе как раз и указывает на cryptmethod (1 - zip, 2 - blowfish, 3 - blowfish2).

Вот тут еще есть весьма подробная и полезная шпаргалка по VIM.

Если бы vim написали в Microsoft, то выглядел бы он, вероятно, как-то так :)

Помощник-скрепыш в VIM

Помощник-скрепыш в VIM :)

Posted in *nix.


0 Responses

Stay in touch with the conversation, subscribe to the RSS feed for comments on this post.

You must be logged in to post a comment.