Еще одна шпаргалка

    VIM содержит сотни команд, выучить их все невозможно, да и по правде говоря «зазубривание» — дело неблагодарное. Читая различные факи и туториалы я взял за правило заносить новые для меня команды в отдельный файл, сопровождая их кратким описанием. В процессе работы с редактором я часто заглядываю в этот файл и с течением времени многие команды из него пополняют мой стандартный набор. Своим файлом-шпаргалкой я и хочу с вами поделиться.

    Описания команд максимально лаконичны, часто в ущерб точности. Подробную информацию о команде можно посмотреть в документации (:help cmd). Дополнения приветствуются.

    Поиск

    * — поиск слова под курсором. Как и при любом другом поиске n и N позволяют перемещаться между совпадениями.
    # — то же самое, но в обратном направлении.
    gd — переход к локальному объявлению. Переходит к первому упоминанию слова под курсором в пределах функции, игнорируя комментарии.
    gD — переход к глобальному объявлению. Аналогично gd, за исключением того, что ищется первое упоминание в пределах файла.
    [[ — переход к началу функции.

    Замена

    %s/foo/bar/c — замена с подтверждением.
    perldo s/foo/bar/g — perl регулярные выражения.

    Перемещение

    fx — переместить курсор на первый символ x в текущей строке.
    tx — установить курсор перед символом x.
    Fx, Tx — в обратном направлении.
    ; — повторить последнее перемещение.
    `. — перейти к последней редактируемой строке.
    `` — перейти к последней активной строке.
    % — перейти к парной скобке.

    Разное

    = — в визуальном режиме форматирует выделенный текст.
    ]p — вставка с учетом отступов.
    ga — отобразить код символа под курсором в статусной строке.
    xp — поменять соседние буквы местами.
    J — слияние двух соседних строк.
    u — в визуальном режиме переводит выделенный фрагмент в нижний регистр.
    U — в верхний.
    !sort — в визуальном режиме сортирует выделенный фрагмент. Подобным образом можно применить любую внешнюю команду.
    di{ — удалить текст внутри активных фигурных скобок. Работает для любых других скобок и кавычек (спасибо bbbb).
    da{ — то же самое вместе со скобками (спасибо paul).

    В завершение альтернатива стандартной замене с подтверждением, которой я часто пользуюсь: * или / — поиск кандидата на замену, cw — удаление слова, ввод нового слова, n — переход к следующему совпадению, . — повторение предыдущей команды (замена слова).
    Поделиться публикацией
    Комментарии 41
      +5
      qq — начать запись команд в макрос
      q — остановить запись
      10 @q — использовать макрос 10 раз

      Полезно, например, если необходимо удалить каждую вторую строчку файла или если есть серия файлов, с которыми необходимо сделать одинаковые действия.
        +3
        Extra tip: «qq — начать запись команд в макрос» — вторая буква после q может быть любая. Например, qx -> @x. Так можно записать несколько разных макросов.
          0
          гг)
          как раз совсем недавно удалял каждую вторую строчку с помощью
          :%s/\(.*\)\n.*\n/\1/g
          где вводиться как — ctrl+K, Enter

          забыл про макросы)
            0
            парсер чуть текста съел (ENDL был в угловых скобках)
            :%s/\(.*\)\n.*\n/\1ENDL/g
            где ENDL — вводиться как — ctrl+K, Enter
            0
            А существует ли возможность выполнить макрос «до конца файла»?
            К примеру, если макрос за один раз обрабатывает одну строку и этот макрос нужно применить ко всем строкам, то нужно указать N@q, где N — количество строк. А можно ли N заменить чем-то, что бы автоматически выполнялся макрос до конца.

            @@ — использовать предыдущий макрос.

            +1
            Есть также удобная команда. (просто точка), повторяет последнее действие.

            Например, есть строка: «hello world, hello people», тогда если поставить курсор на первую букву h и в режиме редактирования нажать 5 раз delete, написать какое-то слово, и переместить курсор ко второй h и нажать точку, то оно удалит hello и запишет слово, которое было введено ранее.
              +1
              Упомянул ее в последнем абзаце :)
                +1
                как-то совсем последний абзац проигнорировал, каюсь
              –1
              В чем сакральный смысл повторять то, что и так написано в тысячах других шпаргалок, мало того, все что вы написали, есть в tutorial'е для новичков.
                +2
                Ответ кроется в заголовке-дисклеймере (Yet Another ...).
                  0
                  десять команд — это нифига не шпаргалка, а десять команд, из которых больше половины элементарщина, которая запоминается сама по себе в процессе использования — вообще гроша ломанного не стоит. Что же вы не упомянули i — вход в режим ввода, v — вход в визуальный режим.
                    0
                    Читателям Хабры судить, что элементарщина, а что — нет.
                      0
                      тогда мне жаль хабр, раз это на главной. Хабр все-таки не жж, в котором уместно писать: «Ах, я сегодня впервые увидил вим и вот команды, которые я изучил»
                        0
                        Хабру тебя тоже очень жаль :)
                          +1
                          «читателям Хабры судить», «хабру очень жаль» — у вас есть собственное мнение, зачем говорить за других, говорите за себя. И не надо мне «тыкать», мы вообще не знакомы.
                  +3
                  в vimtutor половины нету.

                  В принципе, этот топик — хороший способ обратить на ВИМ дополнительное внимание. По-моему, это хорошо. Кроме того, я хоть и сижу в VIM, но в целом в повседневной жизни использую ограниченный набор его «фишек», которые когда-то запомнились, как самое нужное. Проходит время, эти «фишки» становятся повседневностью и я открыт запомнить что-нибудь ещё. Неплохо, когда кто-то другой предлагает мне свой набор постоянных, отобранных «фишек».

                  Мне этот топик был полезен, т.к. с его помощью я немного расширил свой «постоянный» набор.
                +1
                Спасибо за:
                `. — перейти к последней редактируемой строке.
                `` — перейти к последней активной строке.
                  +4
                  g; g, — можно ходить по истории позиций изменений
                  +2
                  Спасибо. Чит-шиты также много интересного несут: www.cheat-sheets.org/#Vim
                    0
                    скажите, а зачем вы используете перлдо, ведь и без перлдо можно юзать регулярки.
                      0
                      Вопрос был не ко мне, но я за себя скажу — в виме свои регулярки, синтаксис отличается, зачем помнить 2 синтаксиса регулярок, когда можно помнить один?
                        0
                        я при поиске не использовал ни разу не исплользовал _сложных_ регулярок, но простые ничем не отличались от привычного мне PCRE, единственное отличие — надо экранировать управляющие скобки.
                          +1
                          Вот в том то и дело, что надо кучу всего экранировать в виме. Есть конечно 'magic', но проще использовать :perldo, чем запоминать, что надо экранировать, а что не надо и в каком режиме.
                        +1
                        Перловые регулярные выражения знаю хорошо, а вот встроенные — не очень, поэтому и пользуюсь. К тому же реализация в перле одна из самых (самая?) мощных.
                        0
                        я при поиске не использовал ни разу не исплользовал _сложных_ регулярок, но простые ничем не отличались от привычного мне PCRE, единственное отличие — надо экранировать управляющие скобки.
                          +1
                          очень используемы еще комманды
                          do)
                          di"
                          vo{


                          d или v — удалить или выделить
                          o или i — включая или не включая пограничные символы
                          последний символ — область внутри любых видов скобо, ковычек, слово (w)
                            0
                            <b<di{ — убийственная команда, нигде раньше не встречал. А вот do{ — не работает, говорит что буфер не в diff режиме.
                              +1
                              вместо o надо a. :help text-objects
                                0
                                Мнемоника: i — inner object, a — an object.
                                  0
                                  Спасибо, обновил.
                                    0
                                    спасибо. писал уже поздно вечером и на автопилоте расшифровал как inner и outer.

                                    извените все, что ввел в заблуждение)
                                  0
                                  Добавил в шпаргалку.
                                  0
                                  gd хорош, спасибо.

                                  [[ выходит на верхнюю из вложенных (определение класса например). Есть такая же команда, но только для текущей функции?
                                    0
                                    Я не очень понял вопрос, но возможно [{. А вообще :help 29.3
                                      0
                                      Да, спасибо, [{ должен работать. Но в python не работает :)
                                    0
                                    Очень рекомендую отличный учебник по vim на _простом_ английском языке.
                                    Byte of Vim
                                      +1
                                      Все эти шпаргалки БЕС-ПО-ЛЕЗ-НЫ.

                                      Главое — научиться контролировать что ты делаешь и оптимизировать СВОЙ рабочий процесс. Ну а единственная команда vim, которую действительно стоит выучить, это :help.

                                      Такая моя ИМХА :)
                                        0
                                        Именно об этом Брам рассказывает в видео 7 Habits For Effective Text Editing. Найти, что тебя тормозит — научиться делать это быстрее.
                                        0
                                        А куда комментарии делись?

                                        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                        Самое читаемое