Vim: 7 привычек для эффективной работы с текстом

Подсказки и рекомендации о том, как делать свою работу эффективнее и с меньшим количеством ошибок с помощью одного из самых мощных редакторов Vim.

Когда проводишь много времени, печатая однообразный текст, код программы или веб-страницы, хороший редактор, например, Vim, может сэкономить кучу времени и сил. Эта статья содержит подсказки и рекомендации относительно того, как делать свою работу более эффективно и с меньшим количеством ошибок.

В качестве образца такого редактора будет использован Vim. Это не значит, что прочие редакторы хуже или не подходят - все сказанное в данном тексте справедливо и для остальных текстовых процессоров, с поправками на интерфейс. Однако, если вы не знаете, какой редактор выбрать или недовольны своим - попробуйте Vim и не пожалеете.

Часть первая: редактирование файла

1. Быстрые перемещения

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

  • Если вы ищете определенное слово, используйте команду *. Она захватит выделенное курсором слово и покажет первое совпадение.
  • Если включить опцию incsearch (это делается с помощью :set incsearch), перед тем как воспользуетесь /паттерн, Vim будет искать первое совпадение в тексте, пока вы вводите слово. Этот способ здорово поможет при поиске опечаток.
  • Если установить опцию hlsearch (аналогично предыдущему), то Vim выделит все совпадения желтым. Такой вариант подойдет для поиска различных паттернов в тексте, например, переменных в коде программы.

В структурированном тексте можно перемещаться еще проще и быстрее. К примеру, у Vim есть определенные команды для программ на C (и C-подобных языков, вроде C++ или Java):

  • Команда % поможет проскочить от открытой скобки до закрывающей ее скобки, так же как сочетание # if переключит вас на # endif. С помощью % удобно проверять конструкции вроде () и {}.
  • Сочетание [{ поможет перепрыгнуть к { в начале блока кода.
  • Использование gd поможет перескочить от переменной к месту ее объявления.

Их еще много, конечно же. Но узнать их лучше самостоятельно. Вы скажете: да их сотни - и есть как довольно простые так и слишком запутанные, чтобы изучить их все уйдут недели! Да, это действительно так. И учить их все совсем необязательно - просто найдите те, которые понадобятся вам для ваших задач и определят ваш собственный стиль редактирования.

Три основных шага

  • Во время правки, внимательно следите за действиями, которые часто повторяются и/или на которые уходит мало времени.
  • Найдите в редакторе команду, которая позволяет делать это быстрее: почитайте документацию, спросите друга, посмотрите, как это делают другие.
  • Пробуйте использовать команду. Делайте это до тех пор, пока не научитесь пользоваться ей на автомате.

Давайте посмотрим на примере, как это работает:

Вы обнаружили, что редактируя код программы на C, вы часто ищете место, где объявляется та или иная функция. Допустим, вы используете *, чтобы найти места, где попадается имя функции, но прежде, чем добраться до нужного места, приходится переключаться через множество совпадений. И вот вы узнаете, что можно двигаться быстрее. Документация подсказывает, как можно проскочить сразу к определению функции - как раз то, что надо!

Вы экспериментируете понемногу: создаете файл с тэгами через программу ctags, идущую с Vim. Учитесь пользоваться Ctrl-] и замечаете, насколько быстрее все происходит. Затем, чтобы сделать процесс еще проще, добавляете несколько строк в файл сборки, чтобы генерировать файл с тэгами автоматически.

И вот еще пара вещей, которые не нужно упускать из виду в это время:

  • „Мне нужно работать, у меня нет времени на чтение документации и поиск каких-то там команд" - если будете так думать, застрянете в каменном веке. Есть люди, которые до сих пор используют Блокнот для всего, что только возможно, а потом задаются вопросом: почему это другие сделали работу в два раза быстрее?
  • Не переусердствуйте. Не нужно искать команды для каждого своего действия, выберите только те, которые занимают много времени. Если загружать мозги поиском и заучиванием команд для редактора, на работу не останется времени. Стоит автоматизировать только те действия, которые занимают больше времени, чем можно на них себе позволить.

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

2. Не нужно писать дважды

Количество слов, которые мы используем ограничено. Особенно это касается программного кода - и не всегда ведь охота писать одно и то же много раз? Для этого Vim использует несколько команд. Если слово нужно заменить во всем тексте, подойдет команда :s. Если слов немного, то можно воспользоваться *, чтобы найти нужное слово, потом использовать cw для замены. Затем можно использовать n, для перехода к следующему и слову и . для повторения cw.

Команда . повторяет последнее изменение. Под изменением понимается вставка, удаление или замена текста. Эта функция является очень мощным механизмом. Если правильно организовывать свою работу вокруг нее, то множество замен может стать делом одной правильно поставленной точки. К тому же, можно не упускать и промежуточные изменения и возвращаться к ним позже, предварительно отметив их с помощью команды m.

Некоторые имена функций и имена переменных бывает неудобно печатать. Как, например, можно быстро написать "XpmCreatePixmapFromData" без опечатки или предварительного поиска? Для этого в Vim предусмотрен механизм завершения. К примеру, можно написать "XpmC", использовать Ctrl-N и Vim расширит имя до конца сам. Таким образом, можно сэкономить много времени и на печати и на поиске ошибок, который не придется делать, благодаря корректному автозаполнению.

Если дело касается слов и выражений, то все можно сделать еще проще. Дело в том, что Vim поддерживает механизм макросов. К примеру, можно написать qa - таким образом начнется запись в регистр "a", а затем ввести q еще раз, когда закончили. Теперь, если написать @a, редактор выдаст все, что было записано в "a". Все 26 регистров в вашем распоряжении.

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

3. Исправлять, когда ошибся

Нормально делать ошибки печатая - этого никому не избежать. Но здорово, когда редактор может исправить ошибку сам, а для этого его нужно научить: объяснить что случилось и как это на самом деле должно выглядеть.

Очень часто происходят похожие ошибки, их легко предугадать и исправить, используя аббревиатуры. Вот несколько примеров:

:abbr Lunix Linux
:abbr accross across
:abbr hte the

Так же этот прием может быть полезен для использования длинных слов или словосочетаний. К примеру, несколько букв, обозначающих какое-либо сокращение, можно заменять развернутым текстом без траты времени и боязни опечатки. Например, вот так:

:abbr pn penguin
:abbr MS Mandrake Software

Однако, во втором случае, если вы действительно захотите написать MS, у вас возникнут проблемы. Поэтому лучше использовать простые сочетания букв, у которых нет собственного значения.

Для поиска ошибок в Vim предусмотрен умный механизм подсвечивания. Фактически, он предназначен для подсвечивания синтаксиса программ, но может быть использован и для поиска ошибок.

Синтаксическая подсветка выделяет комментарии цветом. Не звучит как важная фишка, однако в случае, когда кусок комментария не подсвечен, сразу становится ясно, что в конце не хватает знака. Или наоборот, когда часть кода помечена как комментарий - тоже явно что-то не так. А ведь это такие ошибки, которые могут отнять много времени на поиск, когда станет ясно что программа компилируемая как-то не так.

Подсветка синтаксиса также помогает при поиске незаконченных конструкций и скобок. К примеру, одиночная ) будет подсвечена красным. Можно также легко определить и другие частые ошибки, к примеру использование # included <stdio.h> вместо # include <stdio.h>. Такую ошибку легко допустить, но ее можно будет легко заметить, так как "include" будет подсвечен, а included - нет.

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

Часть вторая: редактирование множества файлов

4. Файл редко приходит один

Естественно, ситуации, когда в редакторе открыт только один файл случаются не часто. Обычно это несколько связанных между собой документов, каждый из которых редактируется отдельно, в одно и то же время. И этом случае необходимо также сделать работу редактора более эффективной.

Ранее упомянутый механизм тегов работает так же и для скачков между файлами. Обычно, генерируется файл тегов для всего проекта и используется в процессе работы для переходов к отдельным файлам и местам объявления функций, переменных и так далее. Время, которое будет сэкономлено в сравнении с ручным поиском огромно.

Другой мощный механизм ищет все случаи совпадения имени в группе файлов через команду :grep. Vim создает список всех совпадений и переходит к первому из них. Затем, с помощью :cn можно проскочить к следующему. Это может быть очень полезно, если нужно изменить количество аргументов в вызове функции.

Вложенные файлы содержат полезную информацию. Но чтобы найти тот, который содержит нужное описание, приходится тратить уйму времени. К счастью, Vim знает о вложенных файлах и можно задать искомое слово в качестве параметра поиска. Наиболее распространенное действие - поиск прототипа функции. Поместим курсор на название функции и введем [I: Vim покажет все совпадения в именах функций во вложенных файлах. Если необходим контекст - можно легко переключиться на описание. Подобную команду можно использовать, чтобы понять: правильные ли заголовочные файлы были использованы.

В Vim можно разделить текстовую область на несколько частей и редактировать одновременно несколько файлов на одном экране, перемещая текст между ними и одновременно внося правки. Существует множество команд, чтобы открывать/закрывать окна, переключаться между ними и так далее. Здесь снова придется обратиться к трем основным шагам.

Существует множество способов работы с множественными окнами. Механизм превью-тегов — хороший пример. Он позволяет открыть специальное окно предпросмотра, наведя курсор на файл, продолжая при этом работать. Окно предпросмотра может, к примеру, показывать содержимое функции, на имя которой наведен курсор. Если переместить курсор на другое имя и подержать его там секунду - содержимое окна покажет описание уже новой функции. Так же это будет работать со структурами или с функциями, которые объявлены во вложенном файле.

5. Давайте работать дружно

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

Простой пример: в резюме, которое вы пишете, не должно быть больше 500 слов. Теперь просто выбираете абзац и отправляете его в приложение wcvip:w !wc -w. Внешняя команда wc -w используется для подсчета слов. Довольно просто, правда?

Всегда найдется функционал, которого не будет в редакторе и позволяя фильтровать текст другой программе, вы добавляете его извне. Это ведь так в духе Unix: у вас есть множество утилит, которые хорошо работают врозь, но всегда могут объединиться, чтобы решить одну большую задачу.

Но тут есть две стороны медали. С одной стороны подключение внешнего функционала возможно не во всех редакторах. С другой - можно бесконечно расширять способности самого редактора и Emacs - хороший пример того, как это может закончиться (кое-кто шутит, что он превратился в операционную систему, в которой можно еще и редактировать текст).

Vim старается работать с другими программами, но это все еще не общедоступно. К примеру, Vim можно использовать в качестве редактора в MS-Developer Studio и Sniff. Некоторые почтовые клиенты, вроде Mutt, поддерживают Vim. Осуществлена интеграция с Sun Workshop. Но, как бы то ни было - это та область, которая должна быть улучшена уже в ближайшем будущем. И тогда у нас будет полноценная система, а не сумма ее частей.

6. Текст структурируется

Иногда случается работать с текстом, который структурирован не так, как привыкли. В этом случае нужно вернутся к "трем основным шагам" и сделать свои макросы и плагины под это дело. Здесь начинается более сложный материал.

Один из наиболее простых подходов, чтобы ускориться - это использование цикла вида „изменить-компилировать-исправить“. В Vim есть команда :make, которая начинает компиляцию, находит ошибки и позволяет потом быстро перемещаться по ним, чтобы исправить. При использовании другого компилятора, сообщения об ошибках могут быть не распознаны. Вместо того, чтобы пользоваться старой функцией записи, нужно настроить 'errorformat' - эта опция сообщает Vim, как должны выглядеть ошибки.

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

Использование трех основных шагов помогает эффективнее работать со структурированным текстом. Просто подумайте о действиях, которые вы будете совершать с этим файлом, найдите подходящие команды и пользуйтесь ими. Это и вправду так просто, как звучит.

Часть третья: обострите зрение

7. Развивайте привычку

Обучение езде на автомобиле требует определенных усилий. Но разве это повод продолжать ездить на велосипеде? Конечно, нет. Вы же понимаете, что должны потратить время, чтобы получить новый навык. То же самое и с редактированием текста: вы должны изучить новые команды и превратить их использование в привычку.

С другой стороны изучение всех команд редактора было бы пустой тратой времени. Большинству людей для работы нужно лишь 10-20 процентов всех команд, но для каждого этот набор свой. Этот подход требует того, чтобы время от времени вы откидывались на спинку кресла и думали, есть ли задачи, которые вы часто повторяете и которые стоило бы автоматизировать. Однако если это разовая задача, то не стоит тратить время на ее оптимизацию. Лучше потратить его на ускорение процесса поиска по тексту. Если же задача действительно большая, то прежде чем начинать писать свои макросы, лучше посмотреть в интернете, не делал ли кто это до вас.

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

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

Эпилог

Идея навеяна книгой "7 привычек высокоэффективного человека" Стивена Р. Кови. Рекомендуется к прочтению всем, кто хочет решить личные и профессиональные проблемы. Хотя, наверное, некоторым могло показать, что мысль пришла от книги Скота Адамса "Семь лет очень дефективных людей" (тоже рекомендуется!).

Об авторе

Брэм Муленаар – главный автор Vim. Он пишет основную функциональность и выбирает, какие ветки кода будут включены в проект. Он получил высшее образование специалиста по компьютерам в университете Дельфта. Сейчас он главным образом занят софтом, но еще не забыл, как держать в руках паяльник. Он основатель и казначей IFCC Holland, организации, которая помогает сиротам в Уганде. Помимо этого, он работает внештатным архитектором систем, но большую часть времени посвящает Vim. Адрес его электронного ящика: Bram@Moolenaar.net

Первоисточник
Перевел Сергей Ворничес

Другие статьи по теме

Что вам стоит знать, если вы начали изучение Vim

5 бесплатных ресурсов по изучению Vim

Комментарии

ВАКАНСИИ

Добавить вакансию
Разработчик C++
Москва, по итогам собеседования

ЛУЧШИЕ СТАТЬИ ПО ТЕМЕ