Использование Vim для редактирования простого текста

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

    Конкретно для меня стимулом явилась возникшая сложность при работе с переводами. Проблема заключалась в следующем: несмотря на разрешение экрана в 1920х1200 сделать так, чтобы оба текста располагались перед глазами, было практически невозможно. Да и дергаться мышью туда-сюда, управляясь с полосами прокрутки, запоминая положения текстовых фрагментов, довольно таки неудобно. Консольный текстовый редактор, управление которым осуществляется клавиатурой, представлялся для меня логичным решением. Оставалось только разобраться в нем и из огромного массива информации выбрать только то, что нужно.

    Забегая вперед, скажу, что информацию пришлось собирать фактически по крупицам. Основное направление в использовании Vim в качестве редактора «для программистов» привело к тому, что вопросам обработки «простого» текста уделяется мало внимания. В конце-концов, с поставленной задачей, как мне кажется, удалось справиться.


    Первоначальные сведения о работе редактора.



    Про командный режим, режим вставки, навигации по тексту и т.п., написано более чем достаточно. Однако все это можно свести к одной команде — vimtutuor. Это, как понятно из названия, обучалка базовым принципам Vim. Если вашим дистрибутивом является Ubuntu, то сперва необходимо установить полную версию редактора:

    sudo apt-get install vim-full

    Единственным значимым, на мой взгляд, аспектом, который не охватывает туториал — является работа в визуальном режиме. Но здесь все просто: В командном режиме нажимаем клавишу «v», выделяем необходимый кусок текста, после чего выполняем с ним необходимую операцию: будь то форматирование, удаление или копирование.

    Наиболее важным вопросом, на который следует ответить перед использованием Vim для обработки текста — это перенос набранного текста по строкам. По умолчанию редактор будет писать текст одной длинной строкой, границей которой будет нажатие клавиши Enter.
    Это хорошо для редактирования исходного кода, но совершенно неприемлемо для написания текста. Решения здесь два. Использовать команду

    :set wrap

    Это заставит редактор переходить на другую строку при достижении края окна терминала, но при переходе не будет установлен символ конца строки. Таким образом, все, что мы наберем до нажатия Enter, будет являться одной длинной строкой. Это не очень удобно, поскольку навигация по строкам является довольно важным аспектом редактирования. Решением в данной ситуации будет использовании команды

    :set tw=80

    Она установит длину строки в 80 символов, что, на мой взгляд, является оптимальным.
    При достижении указанного значения, редактор перейдет на другую строку, поставив символ окончания строки.

    Форматирование текста


    Следующим вопросом, на который необходимо было найти ответ — как осуществлять форматирование текста. Для этого пригодятся следующие команды:

    :ce - выравнивает строку по центру
    :ri - выравнивает строку по правому краю
    :le - выравнивает строку по левому краю


    Но как выровнять текст, что называется, «по параграфам»? Чтобы левый и правый край были ровными. Помощь Vim говорит, что для этого нужно использовать внешнюю программу. Но есть и другое решение. Подключаем макрос (идет в стандартной поставке):

    :source $VIMRUNTIME/macros/justify.vim

    После этого командой "_j" в режиме редактирования можно выровнять выделенный текст «по параграфам».
    Несмотря на то, что мы задали фиксированную ширину, при редактировании текста может получиться ситуация, когда одна строка окажется длиннее, или, напротив, короче. Это вполне логично — поскольку строка заканчивается символом переноса строки, который может быть затерт или смещен влево. Привести абзац к фиксированной ширине можно выделив текстовый блок в визуальном режиме и воспользоваться командой «gq».

    Проверка орфографии.


    Неотъемлемой функцией текстового редактора для меня является проверка орфографии. В Vim этот вопрос решается так:
    Качаем архивы со словарями. Разархивируем их в папку /tmp/dict (без подкаталогов внутри).
    Создаем папку
    mkdir -p ~/.vim/spell/
    Далее формируем словарь в Vim-формате командой:
    :mkspell! ~/.vim/spell/ru /tmp/dict/ru_RU — для русского языка
    :mkspell! ~/.vim/spell/en /tmp/dict/en_US — для английского

    Понятно, что словарь может быть любого доступного языка. Причем одновременная проверка многоязычного документа работает замечательно! После этого проверку орфографии можно включить командой:

    :setlocal spell spelllang=ru_ru,en_us

    Работа с несколькими документами.


    Для открытия нового окна используем команды:

    :new — создает новый документ в новом окне

    Если же требуется открыть уже имеющийся документ, лучший способ, на мой взгляд — это ввести в командном режиме

    :Sex

    Откроется подобие файлового менеджера, в котором можно выбрать требуемый для редактирования файл. Перемещение из окна в окно осуществляется следующим образом: Наживаем CTRL-w, а затем стрелкой курсора переходим к нужному окну. Вместо курсора можно воспользоваться навигационными клавишами — h,j,k,l
    После того, как все требуемые документы открыты в одном окне, необходимо расставить их по местам, выбрав требуемый размер. Это делается так:
    CTRL-w, а затем навигационная клавиша, только с зажатым шифтом -H,J,K,L соответственно.

    Разложив окна, можно подогнать их размер под конкретные нужды можно так:
    CTRL-W +
    CTRL-W —
    изменяют размер окна по вертикали;
    CTRL-W <
    CTRL-W >
    изменяет размер окна по горизонтали.

    В качестве резюме.



    Если изложенное выше оказалось для вас полезным, а Vim оказался пригодным для написания и редактирования текстов, самое время перейти к составлению своего конфигурационного файла. Для этого Открываем в своем домашнем каталоге файл vimrc — и вписываем туда команды, которые сочли полезными для каждодневного использования. У меня это ширина текста, проверка орфографии и использование макросадля выравнивания текста «по параграфам».
    Кроме того, в случае если используется юникод, настоятельно рекомендую ознакомиться с материалами на ru.wikibooks.org/wiki/Vim и прописать в конфигурационный файл переназначение символов. Потому как постоянное переключение русской-английской раскладки в командном режиме реально утомляет.

    p.s. Сперва я хотел разместить этот топик в блоге, посвященному Vim. Нопотом решил, что его читатели уже знакомы с текстовым редактором и столь начальная информация будет не интересна. А вот для новичков в мире *nix, слышавших про «войны» текстовых редакторов, материал будет познавательным и позволит более быстро начать использовать редактор для повседневных нужд.

    Средняя зарплата в IT

    120 000 ₽/мес.
    Средняя зарплата по всем IT-специализациям на основании 7 078 анкет, за 1-ое пол. 2021 года Узнать свою зарплату
    Реклама
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее

    Комментарии 72

      +3
      опцию scrollbind то нашли?
        +26
        а режмов у vim для новичка два: «бибикать» и «всё портить»
          +1
          made my day :D
            0
            ЧЕРТ! ЭКЗАКТЛИ! как раз изучаю :) главное вытерпеть бибикание :)
              0
              set visualbell
            +2
            Если работаем не на сервере, то советую пользоваться gvim. Во-первых правильная интеграция с cliboard'ом X-сервера (при выделении мышкой), во-вторых при разделении экрана на части эти самые части можно мышкой ресайзить и скролить. Ну и плюс привычное, как и у других GUI приложений меню с основными коммандами и short-cut'ами по этим коммандам для использования с клавиатуры.
              0
              эм…
              выделять мышкой вообще говоря не очень удобно.
              а для помещения в буфер x-сервера нужно нажимать, пардон
              "+y
              а для вставки из x-ового буфера:
              "+gP

              я бы не назвал это правильной интеграцией.

              или я что-то пропустил?
                +2
                При использовании gvim «правильную интеграцию» можно настроить через .vimrc
                  0
                  >выделять мышкой вообще говоря не очень удобно.
                  миллионы леммингов опять ошибаются?
                    +1
                    vim не ориентирован на миллионы леммингов.
                  0
                  в vimrc:
                  set clipboard+=unnamed
                  Позволяет использовать иксовый буфер обмена.
                  ну а для копировать — вырезать — вставить у меня стоит:
                  vmap "+yp
                  vmap "+yd
                  vmap "+yp
                    0
                    мануал говорит, что иксовый буфер включается через
                    guioptions+=A или guioptions+=a
                  +1
                  Если же требуется открыть уже имеющийся документ, лучший способ, на мой взгляд — это ввести в командном режиме

                  :Sex

                  Имхо, проще
                  :e .

                  Хотя вообще очень полезная штука — плагин FuzzyFinder — файловый менеджер, список буферов, история файлов, история команд и т.д.
                    0
                    Понял. Спасибо.
                      0
                      :e. откроет браузер файлов в текущем фрейме.
                      :Sex делает сплит и открывает браузер в новом. Как альтернативу, можно использовать: Ctrl+W, n, :e.
                      +6
                      Про Sex не знал, спасибо, запомнил:))
                        +1
                        Для автоматизации переводов есть смысл использовать специализированное ПО (CAT).
                          +4
                          Спасибо
                          Про вим пишут в основном программисты, соответственно у них свой интерес к нему как к IDE
                          а простому смертному интересно редактирования текста
                          если еще что то накопаете обязательно публикуйте, я такую статью давно ждал!
                            0
                            Обязательно. Уже есть кое-какие наработки, но надо до конца разобраться. Хочу настроить взаимодействие Vim с внешним ЖЖ клиентом, формализовать процесс подготовки постов для Хабра в нем и т.п.
                            +1
                            А кто-нибудь в курсе как заставить vim работать в режиме vimdiff? Поясню — если открыты два окна бок-о-бок, то при прокрутке одного — скроллилось бы и второе? Точно знаю что можно так сделать, но не находил как. Подскажете?
                              0
                              :set scrollbind

                              — отличная опция для перевода. Будут одновременно скроллиться все окна.
                                0
                                :diffthis в каждом из сплитов
                                +2
                                И еще пару полезных вещей, для начинающих:

                                Ctrl+W, w — циклически ходит по окнам.

                                :set scrolloff=4 "" минимальное количество строк остающихся выше/ниже курсора. Помогает не терять контекст.
                                :set scrolljump=4 "" минимальное количество строк при скроле
                                :set incsearch "" поиск по ходу набора
                                :set hlsearch "" подсветка найденых элементов
                                :set ignorecase "" игнорировать регистр
                                  0
                                  Спасибо, как раз заинтересовался этим мощным редактором.
                                  Кстати, очень бодрое вступление для начинающих виммеров и просто любопытных:
                                  www.vim.org/scripts/script.php?script_id=2140
                                    –3
                                    Использавать vim для переводов? Зачем же так уродоваться, батенька? Чем Вам OmegaT не глянулась?
                                      0
                                      А я про такой не слышал (((
                                      0
                                      У меня такой вопрос, можно как то в Vim удаленно зайти на sshFS?
                                      И возникакет другой вопрос, как быть с повышением прав, если доступен только sudo :) а надо поправить какой либо конфиг?
                                        +1
                                        :w !sudo tee %

                                        На хабре как-то писали.
                                        +3
                                        Вообще, каждый раз, читая любую статью про вим нахожу для себя что-то новое)
                                          0
                                          vimом пользуюсь лет дофига, но ситуация похожая. внезапно какайнить новай функция да обнаружится.
                                          хотя недавно пересел на ДругойРедактор, и вот там действительно неограниченный (бесконечный) функционал.
                                            0
                                            emacs? Бесконечный потому что программируемый? Под вим уже можно писать плагины на ruby/python.
                                            Не холивара ради, просто сравнение неудачное, если вы о емаксе.
                                              0
                                              да, я о нём, но не рискнул называть всуе :)
                                              плагины в вим появились сравнительно недавно (кажется, с 6ой версии)
                                              (на vimscript особо не попишешь, хотя многое можно и на нём сделать, и сам делал)
                                              а под emacs плагины пишутся лет 20. (уже написали целую операционку.)

                                              по факту — поддержка форматов файлов в emacs (major modes) гораздо лучше чем в vim (ftplugin)

                                              в частности, не сомневаюсь, что в emacs есть специальный режим для перевода.
                                                0
                                                Написал бы кто-нибудь похожий топик про Emacs — именно про редактирование обычных текстов, про проверку орфографии — было бы интересно. Может возьметесь?
                                                  0
                                                  про емакс понаписано на порядок больше, чем про вим.

                                                  а емаксовский встроенный туториал — примерно и есть в формате этой статьи.
                                                  тоесть «редактирование обычного текста для начинающих»
                                                  только там прямо в туториале можно нажимать кнопки и пробовать команды.
                                                  (при этом инструкции что нажимать дальше написаны с учётом перемещения курсора)
                                                    0
                                                    vim tutor полностью аналогично.
                                                    По-моему, сегодня оба этих редактора равны по своим возможностям, хотя vim, конечно, всё-таки больше ориентирован на текст. Я месяц сидел на vim, потом ещё месяц на emacs. Слез с последнего по причине того, что мне были ближе внятные слова после: и несколько горячих клавиш, чем стаккато на клавиатуре в emacs :)
                                          –3
                                          Ужас… Объясните мне, зачем столько телодвижений?
                                          Это называется «удобно»?

                                          Я конечно рискую быть непонятым, но для меня vi и vim навсегда останутся всего-лишь стандартными средствами редактирования конфигов и скриптов по ssh.
                                          И не надо мне рассказывать про «мегафункционал», они просто неудобны.
                                            +1
                                            К примеру те-же закладки в тексте.
                                            Одно '' чего стоит.
                                            Навигация по тексту, неограниченное количество буферов обмена, поиск\замена\макросы. При редактировании больших текстов это всё вам значительно упростит жизнь. Ну разве что вы гений и сразу же пишете правильный, логически связанный текст, под диктовку от бога и вам не нужно будет его постоянно править, подправлять, возвращаться к разным кускам текста и т.д.
                                              0
                                              > Навигация по тексту, неограниченное количество буферов обмена, поиск\замена\макросы.
                                              как ни странно это все (включая макросы) есть не только в vim
                                                0
                                                а вот регекспы есть далеко не везде
                                                  0
                                                  NEdit, Kate, notepad++ (win)
                                                    0
                                                    И всё это делается далеко не так просто, как в vim:
                                                    Просто, во время просмотра текста, /регулярка — и по мере набора будут подсвечиваться результаты.
                                              0
                                              И не надо мне рассказывать про «мегафункционал», они просто неудобны.

                                              Да ради бога, кто Вас заставляет. Пользуйтесь своим Блокнотом и дальше…
                                                0
                                                Да, пожалуй, с vim ситуация не очень схожа с, к примеру, линуксом.
                                                Если приверженцам последнего выгодна популярность их любимца(драйвера, игры, программы), то вим — как таинство, почти высшая степень познания дао — через несколько дней трудов и нервотрёпки получаем превосходный незаменимый инструмент, применимый практически к любой задачи в контексте работы с текстом.
                                                После освоения vim мной и моей командой — скорость разработки RoR-приложений выросла вдвое. По двум причинам пополам: непосредственно скорость и удобство управления и прыжков по файлам и, как это ни звучит — отсутствие лени как таковой — программировать в vim [b]интересно[/b], не говоря уже о том, что он ресурсов практически не требует.
                                                  +1
                                                  [b] извиняюсь, форумная привычка
                                                  0
                                                  Угу, давайте еще больше крайностей.
                                                  Великий vim с одной стороны и убогий notepad.exe с другой. Больше вариантов нет, конечно.
                                                    0
                                                    Ну Вы же несете чушь, почему мне нельзя? То, что Вам неудобно, Вы не умеете, Вам лень учиться — это только Ваша проблема, не нужно заявлять, будто это «просто неудобно» для всех.
                                                      0
                                                      Во-первых, пожалуйста, покажите мне место, где я написал «это неудобно для всех».
                                                      Во-вторых, пожалуйста, расскажите мне из чего вы сделали вывод что я «не умею» и мне «лень учиться».
                                                        –1
                                                        И не надо мне рассказывать про «мегафункционал», они просто неудобны.

                                                        Звучит как утверждение. Для всех.
                                                  0
                                                  > Ужас… Объясните мне, зачем столько телодвижений?
                                                  > Это называется «удобно»?

                                                  Да, ибо кому-то удобно то, что позволит выполнить работу в кратчайший срок, кому-то — то, что позволяет начать работу немедленно, а кому-то и то, с чем он работал в прошлый(или первый) раз.
                                                    0
                                                    а ты посчитай по секундомеру, сколько времени занимает:
                                                    перемещение мышкой на позицию курсора, нажатие левой кнопки, перемещение мыши на 5 строчек вниз, отпускание левой кнопки, нажатие правой кнопки, выбор пункта «copy» в выпавшем меню.
                                                    затем приплюсй сюда время, необходимое на перемещение руки от клавиатуры до мыши и обратно.

                                                    и сравни со временем нажатия кнопок ESCv5jy не отрывая рук от буквенной клавиатуры
                                                      0
                                                      И смекалку развивает, и соображалку — если не остаёшься на стрелочках и идёшь дальше — постепенно учишься на ходу принимать сложные и не очень математические решения.
                                                        0
                                                        ESCy5y или ESC5yy
                                                        Команда y получает счётчик. Также это одна из команд, которая при использовании в качестве объекта самой себя подразумевает строки, как и, например, dd.
                                                          0
                                                          да, действительно.
                                                          это ещё на одно нажатие короче.
                                                          0
                                                          Хоткеи уже отменили? :)
                                                          ctrl-c, ctrl-v? Стрелочки? PgUp, PgDown? Shift?
                                                          Тянуться к мышке как-то совсем не надо. В данном конкретном случае.
                                                            0
                                                            ESC 5 y y — 4 кнопки
                                                            shift вниз вниз вниз вниз вниз ctrl c — 8 кнопок
                                                            vimовские хоткеи в 2 раза эффективнее

                                                            автоповтор кнопки вниз сравним по скорости с нажатиями
                                                              0
                                                              Да я не спорю что меньше нажатий. Я к тому, что к мышке тянуться нет никакого смысла :)
                                                              Тут еще можно заметить, что ктрл и шифт находятся снизу и рядом, равно как и стрелки, удобно для рук.
                                                              А вот к ESC тянуться дальше. Да и кнопки y и 5 находятся в центре, вдобавок ничем не отличаются от соседних. Есть шанс промахнуться.

                                                              Конечно это из области домыслов, но тем не менее.
                                                                0
                                                                Основным режимом при редактировании текста является командный. Скопировать в буфер 5 строк — 5yy. ESC нужно нажимать чтобы выйти из режима вставки сразу после ввода текста.
                                                                  0
                                                                  Как ни странно, про esc и insert я в курсе %)
                                                                  Но мы вроде взяли гипотетическую ситуацию, которая возникает как раз в процессе набора текста.
                                                              +1
                                                              А если, надо выделить не 5, а 7 строк?
                                                              А текст, до следующей запятой? (vt,y)
                                                              А как вы поменяете два слова местами (dwp)
                                                              А две буквы? (xp)
                                                              А два предложения местами поменять? (df.p)

                                                              Примеров огромное количество, стрелочки просто отдыхают.
                                                                0
                                                                Честно-говоря не могу представить ситуации когда бы мне понадобились такие операции, кроме, пожалуй, первой.

                                                                А насчет функциональности я ничего и не говорил, я сказал что мне неудобно :) Почему все кинулись описывать мне функционал? Я с ним в общем-то знаком, ибо работаю с безголовыми серверами и частенько приходится юзать vi/vim.
                                                                  0
                                                                  Вы никогда не прхидлось мнеять бувкы метсами?
                                                                    0
                                                                    У меня такое почему-то бывает только с русским языком и, в основном, в процессе общения через жабу/аську :)
                                                                    Текстовые редакторы я для русского текста никогда не использую, как-то не было причины.
                                                                    Ну а при программировании у меня всегда автозаполнение…
                                                                      0
                                                                      Если вы не редактируете большие тексты в Vim, то о чём вообще разговор?

                                                                      Не читал, но осуждаю?
                                                                        0
                                                                        Не редактирую, потому что vim для меня неудобен. По-моему это логично.

                                                                        Ладно, вопрос в общем-то исчерпан, холивара я не хотел и не хочу.
                                                                        Пусть каждый останется при своем, вот и все.
                                                                  0
                                                                  Продолжим… :)

                                                                  > А текст, до следующей запятой? (vt,y)

                                                                  yt,

                                                                  > А два предложения местами поменять? (df.p)

                                                                  () перемещают курсор по предложениям.
                                                                    0
                                                                    v% выделить текст до закрывающей скобки — оччень клево
                                                                      0
                                                                      Кстати автодополнение слов по табу — очень крутая вещь при редактировании любых текстов.
                                                            0
                                                            в 7-ой версии вместо :Sex использовать :tabe /путь/к/файлу — если знаете где файл находится (стандартный bash-евский автокомплит файлов по Tab там тоже работает)
                                                            Стандартная навигация между табами командами :tabprev :tabnext — имхо неудобна, для себя я замапил ее на Shift+Z, Shift+X:
                                                            :nmap Z :tabprev:nmap X :tabnext
                                                              +2
                                                              Ой, хабр побил мой текст:
                                                              :nmap Z :tabprev<cr>
                                                              :nmap X :tabnext<cr>
                                                              
                                                              +1
                                                              Когда-то из VIM'a мы выходили ребутом…
                                                              :)) оффтоп )
                                                                0
                                                                Прошу прощения, господа, ну раз уж тема о редактировании текстов, никто не подскажет, где можно найти книгу Столлмана об Емаксе, как-то находил, но забыл даже название… -(
                                                                  0
                                                                  Мда. А с текстовыми редакторами для не-программистов вообще всегда труба. Для Windows мне известен только Q10 (очень удачный, кстати), для Linux — PyRoom

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

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