Skip to content

Latest commit

 

History

History
 
 

text_editors

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Текстовые редакторы

Вы уже писали код на первом курсе. И, вероятно, писали тексты на русском и/или английском. Скорее всего, процесс отличается в этих двух случаях.

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

Но в целом помните несколько правил, когда Вы встречаете новый редактор:

  1. Они несложные, у них просто разная философия.
  2. За час-два Вы худо-бедно сможете писать текст. После 20 часов практики Вы поймётё, как пользоваться любым из vim, emacs, VSC, sublime text на очень приличном уровне.
  3. Читайте туториалы, делайте cheat sheet, находите классные трюки и хаки.
  4. В большинстве случаев это удовольствие для себя.
  5. Текстовые редакторы могут дать Вам 90+% функциональности IDE и быть в 10 раз быстрее. Поверьте, быстрая навигация, поиск, замена текста, кастомизация — одни из немногих вещей, по которым я видел, что программисты действительно счастливы.
  6. Если Вы тратите на какое-то текстовое действие много времени, скорее всего есть способ сделать это быстрее. Обращайтесь к поисковикам, они действительно много знают.

Что выбрать?

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

Что популярно?

По опросу программистов со stackoverflow одни из самых популярных не IDE сред разработки — это Neovim(vim), Visual Studio Code, Rider. Я расскажу про vim и Sublime Text, остальные очень похожи по философии с кем-то из этих двух.

Vim

Я иногда пользуюсь Vim в качестве редактора, особенно когда я хочу работать с кодом удалённо или не могу сохранить код локально. У Vim богатая история: он был последователем редактора Vi (1976) (откуда и название Vi iMproved), и его разработка продолжается до сих пор. У Vim есть несколько действительно крутых идей, и по этой причине многие инструменты поддерживают плагины Vim (например, 1,4 миллиона человек установили плагин Vim для VSC). Vim, вероятно, стоит изучить, даже если Вы перейдете на какой-нибудь другой текстовый редактор.

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

Философия Vim

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

Vim — это отдельный язык программирования, где Вы задаёте команды, комбинируйте их в "скрипты", которые автоматически исполняются. Большинство команд однобуквенные, чтобы сэкономить время для их написания, но их комбинации порой поражают. Есть сайт VimGolf, где люди соревнуются по тому, какое минимальное количество команд надо для выполнения того или иного действия, некоторые результаты там просто поражают своей красотой, элегантностью и эффективностью, всё как в настоящих языках программирования. Vim не любит движения мышкой, потому что это медленно. Да Vim даже не любит использовать стрелки, потому что они находятся далеко от обычных текстовых клавиш клавиатуры. Есть даже расширение vimium в Chrome, которое позволяет пользоваться браузером без мышки.

Модальность

У vim есть несколько модов:

  • Normal: ходим по файлу и что-то меняем (по умолчанию)
  • Insert: наконец-то пишем код
  • Replace: заменяем текст
  • Visual (plain, text, block): выбираем блоки текста, копируем и вставляем потом
  • Cmd: исполняем команды из командной строки

По умолчанию в Vim мод написан слева снизу, Вы можете входить в какие-то моды i для Insert, R для Replace, v для Visual (ещё можно Ctrl+V для блокового, Visual), : для Cmd мода. Выйти из мода на нормальный можно при помощи <ESC>.

Insert

Нажимаем i, пишем текст который надо, как в обычном редакторе. Можно хорошо настроить так, чтобы не отличалось от написания кода в любом другом редакторе — нормальный TAB, нормальное понимание табуляции, скобок и т.д.

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

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

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

Как выйти из Vim?

В vim есть мод Cmd, в котором Вы пишете команды для самих окон, панелей и вкладок. Чтобы войти в мод, надо написать :. Самые популярные из них:

  • :q выйти (закрыть ровно одно окно), чтобы закрыть всё — :qa, выйти без сохранения — :q!
  • :w сохранить ("write")
  • :wq сохранить и выйти, также часто используют :x
  • :e открыть файл в новом окне
  • :ls открыть все буферы (файлы)
  • :help {topic} открыть help
  • :help :w открыть help для команды :w
  • :help w открыть help для команды просто w

Normal mode

Вы должны проводить большую часть своего времени в нормальном режиме, используя команды движения для навигации по буферу. Движения в Vim также называются "существительными" (nouns), потому что они относятся к фрагментам текста.

  • Базовое движение: hjkl (влево, вниз, вверх, вправо)
  • Слова: w (следующее слово), b (начало слова), e (конец слова)
  • Строки: 0 (начало строки), ^ (первый непустой символ), $ (конец строки)
  • Экран: H (верх экрана), M (середина экрана), L (нижняя часть экрана)
  • Прокрутка: Ctrl-u (вверх), Ctrl-d (вниз)
  • Файл: gg (начало файла), G (конец файла)
  • Номера строк: : {number} или {number} G (строка {номер})
  • % (соответствующий элемент)
  • Поиск: f{символ}, t{символ}, F{символ}, T{символ}
    • найти / для перехода вперед / назад {символ} в текущей строке
    • , /; для навигации по матчам
  • Поиск: / {regex}, n / N для поиска совпадений

Visual

v или Ctrl+v для входа, дальше просто навигация, выбор строк. y (yank) для копирования, p для вставки (уже в Normal mode).

Изменения

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

  • i — вход в режим Insert
    • но для управления / удаления текста нужно использовать что-то большее, чем backspace
  • o / O вставить строку ниже / выше
  • d{движение} удалить {движение}
    • например dw — слово удаления, d$ — удаление до конца строки, d0 — удаление до начала строки
  • c{движение} изменить {движение}
  • например cw - изменить слово
    • как d{движение}, за которым следует i
  • x удалить символ (равно dl)
  • s замещающий символ (равно xi)
  • Визуальный режим + манипуляция
    • выделите текст, d, чтобы удалить его, или c, чтобы изменить
  • u, чтобы отменить, Ctrl+r, чтобы повторить
    • y для копирования (некоторые другие команды, такие как d, также копируют)
    • p вставить после курсора, P до курсора
  • Еще многое предстоит узнать: например, ~ переворачивает регистр символа

Например, чтобы поменять строку с нижней, стоит написать ddp.

Счётчики

Также перед многими "глаголами" можно писать числа, например:

  • 3dw — удалить 3 слова
  • 3w — переместиться на 3 слова
  • 10j — переместить курсов на 10 строки вниз
  • 2u — 2 undo

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

Также есть модификаторы, i inside, a around, например:

  • ci[ — поменять контент внутри квадратных скобок
  • da' — удалить всё внутри одинарной кавычки и её саму

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

:s, а дальше всё как в sed с некоторыми особенностями:

  • :.,+2s/a/b/g — заменить всё от текущей строки на +2 ниже
  • :10,15s/a/b/gс — заменить всё на строках 10-15 и спросить confirmation для каждого.
  • :%s/abc/abcd/gci — заменить везде с подтверждением и не обращать внимание на регистр: опция i

Сплит панелей

Так как vim — это всегда про discoverability, нежели про написание кода, то здесь можно работать с панелями, которые можно открывать:

  • :sp — горизонтальный split панелей того же файла, если есть аргумент, откроет другой файл
  • :vsp — вертикальный
  • Ctrl+w h/j/k/l — навигация по панелям
  • Ctrl+w +/- — увеличение или уменьшение панели на 1 строку, перед знаком может быть число
  • Ctrl+w </> — увеличение или уменьшение панели на вертикальные столбцы соответственно
  • Ctrl+w _ — установка высоты, число пишется через
  • Ctrl+w | — установка ширины, число пишется через
  • Ctrl+w = — подстроить все панели равномерно под ширину дисплея

Макросы

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

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

Vim можно кастомизировать через ~/.vimrc. Можете скачать дефолтный конфиг, который в разы лучше, чем стандартный с огромным количеством комментариев.

Это ещё одна очень сильная точка для Vim. Очень много плагинов под разные языки, автодополнения, goto definition, pony plugins, code search, magic motions, и т.д.

Ваш shell на шорткатах Vim

set -o vi для bash, bindkye -v для zsh, для fish fish_vi_key_bindings.

Ресурсы для чтения

Sublime Text

Этот редактор отличается от vim тем, что он имеет достаточно лёгкую навигацию, но всегда находится в Insert моде. Он славен тем, что имеет особенность множества курсоров — Вы можете выделить несколько строк и одновременно их менять.

Sublime Text также нацелен на очень высокую производительность, он умеет обрабатывать миллионы строк кода, делать достаточно неплохую goto definition по регулярным выражениям. Sublime Text имеет огромную кастомизацию. Все действия, которые делаются с vim возможны и здесь, просто чуть больше клавиш надо нажимать.

Множественные курсоры и другие команды

  • Ctrl+d, чтобы выбрать строку по выделению и найти следующую, Ctrl+k, чтобы пропустить

  • Alt+F3, чтобы найти все строки в файле и их заменить

  • Ctrl+Shift+M — выделить всё в скобках

  • Ctrl+z — undo, Ctrl+y — redo

  • Ctrl+shift+up arrow — поменять строку с верхней местами

  • Ctrl+k + Ctrl+u — поменять выделенные символы в верхний регистр

  • Ctrl+k + Ctrl+l — поменять выделенные символы в нижний регистр

  • Ctrl+left,rigght arr — выделение налево или направо

  • Ctrl+l — выделить всю строку

  • Ctrl+d — выбор слова

  • Ctrl+Alt+Space — пометить строку для будущего прыжка по помеченным

  • Ctrl+/ — комментирование выделенных строк в зависимости от языка и раскомментирование, если оно закомментировано

  • Ctrl+[ — выделенные строки сместить вправо

  • Ctrl+] — выделенные строки сместить влево

  • F9 — сортировка выбранных строк

  • Alt+num — прыгаем на num вкладку слева. И никакая мышка не нужна

  • ctrl+BACKSPACE — удаление слова назад

  • ctrl+DEL — удаление слова вперёд

И так далее и так далее. sublime нацелен на работу с блоками и похожими строками. Я лично заметил, что при работе с sublime мой код получается чище из-за того, что легко что-то поменять, какой-то блок закомментировать (что в Vim как минимум 6-7 команд). Код чище, так как я уже задумываюсь о том, как буду его менять в будущем и по регулярным выражениям или просто по уникальным именам его очень просто менять.

Sublime из коробки поддерживает индексацию кода и goto definition по регулярным выражениям. Умеет скрывать куски кода, которые Вам неинтересны и т.д.

Console mode

В Sublime Text есть два console mode, один глобальный, другой на открытые папки и файлы:

  • Ctrl+P — открыть консольный мод и можно выбрать файл по названию, умная сортировка sublime сама подскажет какой файл открывать. Также можно в текущем файле набрать :123 и это прыгнет на 123 строку текущего файла.
  • Ctrl+Shift+P — открытие глобальной консоли, где можно установить плагины и т.д.

Конфиг

В Preferences->Settings можно настроить конфиг. Вот несколько опций, которые мне сильно помогли в работе, увеличили продуктивность и убрали странные баги:

  "rulers": # Линейки для отслеживания Вашего кода, превышают ли они определённый лимит
  [
    80,
    120
  ],
  "save_on_focus_lost": true, # Если теряем фокус на файл, он автоматически сохраняется
  "trim_trailing_white_space_on_save": true # Убираем все пробелы в конце строк при сохранении

Удобная интеграция с git

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

Чтение

Что выбрать в итоге?

(Моя личная рекомендация)Я встречаю много программистов, но более-менее стиль написания кода можно разделить на две примерные категории:

  1. Программисты, которые не будут писать код, пока у них в голове не сложится вся картина происходящего, все контракты функций будут соблюдены и т.д. Такие люди получают наибольший профит от Vim-подобных редакторов. Они действительно читают, правят какие-то комментарии, опечатки, пишут сигнатуры и только потом уже саму имплементацию. Я называю такой подход "снизу вверх" — смотрим на всё, делаем сразу хорошо.
  2. Программисты (как я), которые пишут прототип без понимания явных гарантий всех функций. У них workflow устроен так: написать код, посмотреть что не хватает, дописать, добавить параметр функции, добавить наследование, переименовать функции и повторить так десятки раз. Я такой подход называют "сверху вниз", пока не поймём зачем какая-то гарантия, не написав кода, мы её не напишем. Эти программисты получают от sublime text-подобных наиболее много профита в своей продуктивности из-за лёгкости переименования, пробования всяких разных экспериментов и легкого форматирования.

В целом, выбирайте что удобно, разобранные редакторы лишь показывают разницу в философии.

Что Вы пропустили

На лекции было много примеров, как что-то делать с помощью редакторов, смотрите запись.