Плагины 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" в форточках.

    Similar posts

    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 39

      +3
      Очень полезно, сейчас, как раз потихоньку изучаю vim
        +3
        Пожалуйста, продолжайте.
          +1
          Спасибо, благодаря вам узнал про nerdtree, думал о нехватке подобного с утра (:
            0
            ну это автору спасибо, до nerdtree я еще не добрался с переводом. Можно бы его заинвайтить на Хабр, если он конечно захочет с оккупантами общаться )))
              0
              Посмотрите vimcommander. Двухпанельный ФМ.
                0
                Спасибо, на досуге потыкаю палочкой. Выглядит съедобно.
              +1
              А какой сейчас наиболее адекватный способ ставить плагины? При каждой инсталяции скачивать и устанавливать все по попочкам не очень удобно. Но и обновлять тоже. Может уже есть какой-то вариант репозитория с плагинами и механизмы автоматической установки/обновления?
                +3
                tammersaleh.com/posts/the-modern-vim-config-with-pathogen

                Саму папку в дропбокс и симлинки.
                  0
                  Ух, какой интересный вариант. Надо подумать, и может быть с моим скрестить (см. выше). У меня, как плюс, история изменений получается. А этот даёт возможность автоматом везде апдэйтить окружение.
                    0
                    Папка давно в дропбоксе :). За pathogen спасибо — годная штука.
                      0
                      О, спасибо, попробую!
                        0
                        лучше в github ;)
                        +1
                        Я, для себя, храню репозиторий плагинов в сивиэне. Когда надо установить своё окружение в свежем виме, то я просто сливаю их всех одним махом из сивиэна куда надо. Там всё моё и настроено под меня. Ничего каждый раз качать и настраивать не нужно. Если что то довабляется, настраивается, то всегда можно закомитить, а потом на других окружениях новые настройки можно легко заапдэйтить. Как то так. А как делает сообщество? Интересно было бы узнать, что другие придумали.
                          +1
                          Выше я уже написал. А еще многие просто делают в папке vim гит репозиторий и заливают это дело на гитхаб. Все плагины ставят как сабмодули. Дальше сливаем ставим симлинки и радуемся.
                            0
                            дадада!
                              0
                              Только надо в репозиторий скриптец добавить, чтоб симлинки автоматом, тогда вообще какао.
                          0
                          pathogen + скрипт, формирующий bundles

                          я собсно начал с о статьи выше (http://tammersaleh.com/posts/the-modern-vim-config-with-pathogen), но т.к. руби не использую, переписал на питоне — github.com/dimasg/vim

                          вот еще статья — proft.com.ua/2011/02/9/upravlenie-plaginami-v-vim/#comment-144298959, там вроде тоже приводили варианты как управлять плагинами.
                            0
                            cd
                            rm -rf .vim .vimrc
                            git clone git://github.com/astrails/dotvim .vim
                            ln -sfn .vim/vimrc .vimrc
                            +3
                            Очень поднимает планку продуктивности плагин command-t, он помогает быстро найти и открыть нужный файл в проекте. Сама идея взята из textmate.

                            тут есть скринкасты wincent.com/products/command-t
                              0
                              Отличная штука, но что делать тем, кто не использует руби? Она хочет вим с поддержкой руби…
                                0
                                А им и не нужно пользоваться. Руби нужен только для работы самого плагина.
                                  0
                                  Это понятно, но, получается, мне нужно пересобирать свои многочисленные вимы на серверах, чтобы заработал один плагин…
                                    0
                                    github.com/jamis/fuzzyfinder_textmate
                                    Не пробовал, но он о том же. Вообще поищите плагины которые связаны с fuzzy поиском. Эти вроде бы не единственные
                                      0
                                      Автор давно забросил этот плагин, т.к. его достали частая смена api в оригинальном fuzzyfinder.
                                      0
                                      на убунте: apt-get install vim-nox ;)
                                    0
                                    Возможно не совсем то что требуется, но как один из вариантов можно использовать плагин netrw в паре с incsearch или если графический режим то просто Ctrl+F

                                    Документация
                                    :help incsearch
                                    :help netrw

                                    В конфигурацию нужно добавить
                                    :set incsearch
                                    :set ignorecase
                                    :set smartcase


                                    Пример:
                                    o .
                                    i — выбрать режим в виде дерева
                                    /%some_text% — поиск в директории по мере наобра


                                    Некоторые сочетания клавиш incsearch:
                                    Отмена поиска Ctrl+C
                                    Очистка запроса Ctrl+W
                                    Автодополнение запроса по ближайшему совпадению Ctrl+L
                                    Завершить поиск Enter

                                    Из минусов то что incsearch как и Ctrl+F ищет то что на экране, соотв. он не будет искать в суб-директориях если они не открыты.
                                  • UFO just landed and posted this here
                                    +3
                                    Еще из обязательных
                                    nerdcommenter — комментирование и раскомментирование
                                    bufexplorer — удобный просмотр буферов
                                    ack — поиск по файлам
                                    syntastic — проверка синтаксиса
                                    0
                                    Очень много интересных плагинов показаны в отличных вимкастах vimcasts.org/episodes/archive
                                      –1
                                      Кстати в убунте можно набрать в консоли vimtutor и поучиться использованию вима в интерактивном учебнике.
                                        0
                                        это входил в штатную сборку вима, точно так же как и vimdiff :) собстно тутор это вообще запуск vim с использованием vimtutor.vim…
                                        +1
                                        Любимый редактор
                                          +2
                                          Еще можно добавлять свои цели. Например так:
                                          autocmd FileType eruby,ruby,haml let b:surround_{char2nr("#")} = "#{\r}"
                                          Теперь для файлов Ruby доступна цель # (используется внутри строки, пример: «x = #{2 + 2}»)
                                            0
                                            Охренительно. Спасибо.
                                              0
                                              Я думал все уже видели видеоролик, в котором они все как раз описываются, причем в таком порядке. Если не ошибаюсь на хабре он тоже пробегал. Но не сочтите мои слова критикой — давайте больше статей о Vim
                                                0
                                                ролик не видел, искал на хабре по назвагнию плагина — не нашел, что и стало поводом отпоститься. Поделитесь ссылкой на него, если не трудно!

                                            Only users with full accounts can post comments. Log in, please.