VIM
3 March 2011

Плагины VIM о которых следует знать, часть 1: surround.vim

Топик — вольный перевод статьи Vim Plugins You Should Know About, Part I: surround.vim Петериса Круминса.

UPD: вторая часть

Что такое плагин surround.vim? Вот что говорит о нем автор, Тим Поп (Tim Pope):

Surround.vim работает со всем, что «окружает»: скобками, кавычками, тегами XML и т.п. Плагин предоставляет сочетания клавиш, которыми можно легко удалять, изменять и добавлять пары таких окружающих элементов.

Например, вы можете быстро заключить строку в тег html, или убрать пару фигурных скобок, добавить кавычки вокруг слова, etc.

Вот пара примеров, как можно удалить, изменить, или добавить окружение. Символ | означает позицию курсора.

Примеры удаления окружений:

Окружение можно удалить командой «ds». После набора «ds» ожидается ввод цели для удаления. Это может быть кавычка: ', ", или `, скобки:, (, ), {, }, [, ], <, >, и специальная цель 't' которая вызовет удаление крайнего изнутри тега html.

Text                Command    New Text
---------------     -------    -----------
'Hello W|orld'      ds'        Hello World
(12|3+4*56)/2       ds(        123+4*56/2
<div>fo|o</div>     dst        foo


Видите как просто? Всего в три нажатия. Сравните это с тем, как вы бы действовали по-старинке:

Text              Command    New Text
---------------   -------    -----------
'Hello W|orld'    F'x,x      Hello World
(12|3+4*56)/2     Bxf)x      123+4*56/2
<div>fo|o</div>   Bdf>wdf>   foo


Геморройно, согласитесь? (как еще перевести messy я не додумался — прим. пер.)

Примеры изменения окружений:

Чтобы их менять, есть команда «cs». Как и «ds» она требует ввести цель для замещения, а потом то, на что заменяем. Целей для этой команды предусмотрено несколько больше. Есть цель w для слова, W для слова с окружающими символами, s для предложения, p для абзаца.
Text              Command    New Text
---------------   -------    -----------
"Hello |world!"   cs"'       'Hello world!'
"Hello |world!"   cs"<q>     <q>Hello world!</q>
(123+4|56)/2      cs)]       [123+456]/2
(123+4|56)/2      cs)[       [ 123+456 ]/2
<div>foo|</div>   cst<p>     <p>foo</p>
fo|o!             csw'       'foo'!
fo|o!             csW'       'foo!'


Примеры добавления окружений:

Можно добавлять окружения командой «cs», которая ожидает ввода цели, или командой «ys» которая принимает как аргумент стандартное тперемещение VIM. Специальная команда «yss» окружает целую строку, а «ySS» размещает окружающие элементы на отдельных строках и паче того добавляет отступ.
Text              Command      New Text
---------------   -------      -----------
Hello w|orld!     ysiw)        Hello (world)!
Hello w|orld!     csw)         Hello (world)!
fo|o              ysiwt<html>  <html>foo</html>
foo quu|x baz     yss"         "foo quux baz"
foo quu|x baz     ySS"         "
                                   foo quux baz i
                               "


Окружения можно добавлять и в режиме ввода, с помощью комбинации <CTRL-s>.

Пожалуйста, осторожнее с CTRL-s. Во многих терминалах это останавливает вывод и сессия замораживается! Если это произошло, используйте CTRL-q чтобы её разморозить. Чтобы убрать сочетание CTRL+s из вашего терминала, добавьте строку «stty stop ''» в файл с настройками терминала(.bashrc, .kshrc, etc).

Пример (мы в режиме ввода):

Command                  New Text
-------                  ------------
<CTRL-s>"                ""
<CTRL-s><CTRL-s><html>   <html>
                             |
                         </html>


Заклинаю вас попробовать эти сочитания! Нельзя стать хоккеистом, глядя на игру, надо пробовать самому!

Вот еще полный список команд плагина:

Normal mode
-----------
ds  - delete a surrounding
cs  - change a surrounding
ys  - add a surrounding
yS  - add a surrounding and place the surrounded text on a new line + indent it
yss - add a surrounding to the whole line
ySs - add a surrounding to the whole line, place it on a new line + indent it
ySS - same as ySs

Visual mode
-----------
s   - in visual mode, add a surrounding
S   - in visual mode, add a surrounding but place text on new line + indent it

Insert mode
-----------
<CTRL-s> - in insert mode, add a surrounding
<CTRL-s><CTRL-s> - in insert mode, add a new line + surrounding + indent
<CTRL-g>s - same as <CTRL-s>
<CTRL-g>S - same as <CTRL-s><CTRL-s>


как установить surround.vim?

1. Скачайте surround.zip. Архив содержит плагин и документацию.
2. Распакуйте surround.zip в папку ~/.vim (Unix/Linux), или ~\vimfiles (Windows).
3. Перезапустите Vim (или подключите скрипт командой ":so ~/.vim/plugin/surround.vim" в Unix или ":so ~/vimfiles/plugin/surround.vim" в Windows).
4. Сгенерируйте теги справки с помощью ":helptags ~/.vim/doc" в Unix и ":helptags ~/vimfiles/doc" в форточках.

+54
11.2k 150
Comments 39
Top of the day