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

Поговорили про меня, теперь можно и про виновника торжества.

Что такое текстовый редактор?

Давайте порассуждаем на тему того, что же должен делать этот инструмент. Начнём с того, а с чем он работает? Правильно, с текстом. Напрашивается очевидный вопрос - “а что же такое текст?”.

Что такое текст?

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

Есть слова, СЛОВА, предложения, параграфы, тэги, блоки. Возможно сейчас не до конца понятно что это за объекты, но чуть позже мы научимся делать :h word и все станет предельно ясно. Но нас ничто не ограничивает, мы же живём в мире опенсорса, поэтому для разных типов текста могут появляться свои объекты. Одни объекты могут включать в себя другие, ну это и логично character -> word -> sentence. Теперь текст можно представлять как набор объектов. Ну уже что-то.

Манипуляция текстом

Теперь можно сказать, что текстовый редактор должен как минимум манипулировать объектами и делать это как можно удобнее и эффективнее. Что подразумевается под манипуляцией?

  • Создание, вставка, копирование.
  • Удаление.
  • Перемещение.
  • Изменение.

Эффективность

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

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

Хоткеи и мышь, клавиатура

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

Слышали рекламу в духе: приходите к нам и мы научим вас самообороне за 3 месяца? Серьезно? Три месяца? И что, вы реально думаете, что обычный человек придя на тренировки за 3 месяца станет грозой местных гопничков? Как бы не так, за три месяца он только только подтянет свою физическую форму до вменяемой, еще за это время можно получить завышенную самооценку, но это не похоже на плюс. Другое дело спецназ, там высокий порог вхождения, там отбор: смотрят не только физические, но и моральные качества. Зато, через годик другой получаются настоящие бойцы, с качественной подготовкой, готовые к большинству ситуаций.

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

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

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

Расширяемость

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

Настоящие текстовые редакторы и не очень

Исходя хотя бы из вышесказанного можно понять несколько интересных фактов. К примеру то, что люди обычно называют текстовыми редакторами(Word, Блокнот, mcedit, gedit…) по факту ими не являются. Это просто программы с возможностью производить простейшие операции с текстом. вы же не думаете, что поле в социальной сети, куда вы вводите сообщение - это текстовый редактор? К слову сказать Word - это текстовый процессор и основная его задача - форматирование текста, далека от редактирования текста. Но думаю, что это должно быть уже очевидным. Когда вы называете Word или Блокнот текстовым редактором, вы проявляете свое неуважение ко мне.

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

Каждый из них по-своему хорош, но так исторически сложилось, что я выбрал Vim и уже достаточно давно его использую, лет 5-6. Пробовал и Emacs, но мне ближе понятие vim’овских textobject’ов и хоткеи кажутся удобнее. Вообще говоря особых альтернатив то и нету, зеленые и сырые поделки просто не могут тягаться с таким гигантами этого дела, как наша парочка.

Итого

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