Текстовые редакторы (Vim)

Написание слов и написание кода - очень разные активности. При программировании, вы затрачиваете значительно больше времени на переходы между файлами, чтение, перемещение и редактирование кода, в сравнении с написанием большого объема информации. Это объясняет тот факт, что существуют разные программы для написания текста и кода (к примеру: Microsoft Word и Visual Studio Code).

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

Вот основная концепция изучения и совершенствования работы в новом редакторе:

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

Какой редактор использовать?

Программисты достаточно предубеждены в отношении выбранного текстового редактора.

Какие из редакторов популярны сегодня? Если обратиться к результатам опроса Stack Overflow survey (результаты опроса могут быть предвзяты, т.к. респонденты на одном сайте не представляют всех программистов). Visual Studio Code наиболее популярный текстовый редактор. Vim наиболее популярный консольный текстовый редактор.

Vim

Все лекторы данного курса используют Vim как редактор. Vim имеет богатую историю; он происходит от редактора Vi (1976), который поддерживается по сей день. Vim имеет несколько отличительных идей, и благодаря этому, большое количество других инструментов поддерживают эмуляцию Vim (к примеру, 1.4 миллиона пользователей установили плагин Vim emulation for VS code). Обучиться использовать Vim - стоящее дело, даже если в итоге вы будете использовать другой текстовый редактор.

Невозможно обучить вас всему функционалу Vim в течении 50 минут, поэтому мы сфокусируемся на объяснении “философии” Vim, расскажем основы, познакомим с некоторыми продвинутыми функциональностями и поделимся полезной информацией для совершенствования навыков работы.

Философия Vim

В процессе программирования, основная часть времени тратится на чтение и редактирование, а не на написание кода. В связи с этим, Vim является редактором с переключаемыми режимами : для ввода текста или манипуляций с текстом требуется переключить режим. Vim - это программируемый редактор (при использовании Vimscript и других языков, к примеру - Python), и в тоже время интерфейс Vim по своей сути - язык программирования: нажатие клавиш воспринимается как команды (по мнемоническим именам), и эти команды - комбинируемые. В Vim избегается возможность использования мыши, так как это замедляет работу; в Vim даже избегается возможность использовать “стрелки” на клавиатуре для перемещения по тексту - так как на это требуется лишнее движение.

В конечном результате скорость работы в данном редакторе может соответствовать скорости, с которой вы думаете.

Режимы работы

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

Нажатия клавиш воспринимаются по-разному в разных режимах. К примеру, нажатие клавиши x в режиме Insert приведет к вставке символа ‘x’, но в Normal - символ, на котором находится курсор, будет удален, а в Visual - будет удален весь выделенный текст.

В своей конфигурации по-умолчанию режим работы Vim отображается внизу слева. Изначальный (стандартный) режим - Normal. Большую часть своего времени вы будете проводить в режимах Normal и Insert.

Нажатие клавиши <ESC> используется для переключения в режим Normal из любого другого. Из режима Normal переход в режим Insert осуществляется при нажатии i, в Replace - R, в Visual (простой) - v, в Visual (линейный) - V, Visual (блочный) - <C-v> (Ctrl-V, иногда пишется как ^V), и режим Command-line - :.

Нажимать клавишу <ESC> придется достаточно часто в Vim: подумайте над переназначением клавиши Caps Lock в Escape (macOS instructions).

Основы

Вставка текста (Insert)

Для перехода в режим Insert из режима Normal, требуется нажать клавишу i. Теперь поведение Vim будет схоже с любым другим текстовым редактором, пока клавиша <ESC> не будет нажата для возврата в Normal режим. Этого, с учетом основ, описанных ранее, достаточно для начала работы в Vim (хотя и не особо эффективно, если вы проводите все время при редактировании в режиме Insert).

Буферы, вкладки и окна

Vim поддерживает открытие нескольких файлов, называемых “буферами”. Сессия Vim имеет перечень вкладок, каждая из которых содержит окна (разделенные панели). Каждое окно отображает один буфер. В отличии от других программ известных вам, к примеру - веб-браузер, в Vim нет строгого соответствия (1 к 1) между буферами и окнами: окна - это просто интерфейс отображения. Выбранный буфер может быть открыт одновременно в нескольких окнах, и даже более того - в нескольких окнах одной вкладки. Это достаточно удобно, например, для одновременного просмотра двух разных частей файла.

По умолчанию Vim открывается с одной вкладкой, содержащей одно окно.

Командная строка (Command-line)

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

Интерфейс Vim - язык программирования

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

Перемещение

Вы должны проводить основную часть времени в Normal режиме, используя команды для перемещения по буферу. Перемещения в Vim также называют “существительные”, потому что они относятся к фрагментам текста.

Выбор

Визуальный режим:

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

Внесение изменений

Все, что вы раньше делали с помощью мыши, сейчас требуется делать на клавиатуре с помощью команд редактирования, которые следует объединить с командами перемещения. Вот где интерфейс Vim начинает выглядеть как язык программирования. Команды редактирования в Vim также называют глаголами “verbs”, потому что глаголы действуют на существительные.

Счетчик

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

Модификаторы

Вы можете использовать модификаторы для изменения значения существительных (объектов). Некоторые модификаторы - это i, что обозначает - внутренний, внутри (“inner”, “inside”), и a - внешние (“around”).

Демонстрация

Ниже представлен нерабочий код для fizz buzz:

def fizz_buzz(limit):
    for i in range(limit):
        if i % 3 == 0:
            print('fizz')
        if i % 5 == 0:
            print('fizz')
        if i % 3 and i % 5:
            print(i)

def main():
    fizz_buzz(10)

Нам требуется исправить следующие проблемы:

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

Кастомизация Vim

Vim может быть кастомизирован с помощью текстового конфигурационного файла ~/.vimrc (содержит Vimscript команды). В нем имеется большое количество базовых настроек, которые вы, вероятно, захотите включить.

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

Ссылка на скачивание нашего конфигурационного файла здесь, его требуется сохранить как ~/.vimrc.

Vim имеет большое количество настроек, и целесообразно потратить время на изучение вариантов настройки. Вы можете посмотреть на дот-файлы других преподавателей на GitHub для вдохновения, к примеру (Anish, Jon (uses neovim), Jose).

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

Расширения Vim

Существует огромное количество плагинов для расширения возможностей Vim. Вопреки устаревшим советам, на которые вы можете натолкнуться в интернете, вам нет необходимости использовать менеджер плагинов для Vim (с выпуска Vim 8.0). Вместо этого, вы можете использовать встроенный пакетный менеджер. Просто создайте директорию ~/.vim/pack/vendor/start/, и копируйте плагины туда (например с использованием git clone).

Здесь перечислены некоторые из наших избранных плагинов:

Мы стараемся избежать перечисления избыточно длинного списка плагинов. Вы можете посмотреть дот-файлы других преподавателей (Anish, Jon, Jose), чтобы узнать, какие еще плагины мы используем. Посмотрите Vim Awesome для других великолепных плагинов Vim. Существует большое количество постов в разнообразных блогах на эту тему: просто поищите “лучшие плагины Vim”.

Режим совместимости Vim в других программах

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

Командная оболочка

Если вы используете Bash, введите set -o vi. При использовании Zsh, bindkey -v. Для Fish, fish_vi_key_bindings. Дополнительно, вне зависимости какую оболочку вы используете, вы можете ввести export EDITOR=vim. Эта переменная окружения используется при определении какой редактор требуется запустить, когда программа желает запустить редактор. К примеру, git будет использовать указанный редактор для сообщений при комите.

Readline

Множество программ используют библиотеку GNU Readline для их интерфейса командной строки. Readline поддерживает эмуляцию (базовую) Vim также, которая может быть включена после добавления следующей строки в файл ~/.inputrc:

set editing-mode vi

При включении этой опции, к примеру, Python REPL будет поддерживать сочетания клавиш Vim.

Другое

Существуют даже расширения, позволяющие использовать сочетаний клавиш vim в веб-браузерах - некоторые популярные из них Vimium для Google Chrome и Tridactyl для Firefox. Вы даже можете включить использование сочетаний клавиш Vim в Jupyter notebooks.

Продвинутый Vim

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

Поиск и замена

:s (комбинаторная) команда (документация).

Многооконность

Макросы

Полезные ресурсы

Упражнения

  1. Выполните vimtutor. Пометка: лучше всего выглядит в формате 80x24 (80 столбцов на 24 строки) окна терминала.
  2. Скачайте наш базовый vimrc и сохраните его как ~/.vimrc. Прочтите этот отлично прокомментированный файл (используя Vim!), и познакомьтесь как Vim выглядит и ведет себя немного по-другому с новым файлом конфигурации.
  3. Установите и настройте плагин: ctrlp.vim.
    1. Создайте директорию для плагина mkdir -p ~/.vim/pack/vendor/start
    2. Скачайте плагин: cd ~/.vim/pack/vendor/start; git clone https://github.com/ctrlpvim/ctrlp.vim
    3. Прочтите документацию к плагину. Попробуйте использовать CtrlP для поиска файла и навигации директорию проекта, открытия Vim, и использования командной строки Vim для запуска :CtrlP.
    4. Сконфигурируйте CtrlP добавлением новых параметров конфигурация в ваш ~/.vimrc для открытия CtrlP при нажатии Ctrl-P.
  4. Для практики в использовании Vim, повторите изменения из Демонстрация самостоятельно.
  5. Используйте Vim во всех случаях редактирования текста в течение месяца. В случае, когда что-либо кажется неэффективным, или когда вы думаете “должен быть более хороший способ сделать это”, пробуйте загуглить, и, вероятнее всего, найдете.
  6. Настройте другие ваши инструменты (программы) на использование сочетаний клавиш Vim (посмотрите на инструкции выше).
  7. Продолжайте кастомизировать ваш ~/.vimrc и установите больше плагинов.
  8. (Усложненное) Конвертируйте XML в JSON (пример файла) с использованием макросов Vim. Попробуйте самостоятельно, в крайнем случае - обратитесь к разделу Макросы.

Редактировать страницу.

Лицензия CC BY-NC-SA.