Vim vs. Emacs: Как да мислим за тях - и да изберете редактора си

„Мизерия“ от Джили Родос, достъпна под лиценз Creative Commons

Когато ходя за да напиша статия, поглеждам към Google и виждам какво има там. В този случай направих търсене в Google за „vim срещу emacs“ и „emacs срещу vim“, включително на този сайт, и не намерих това, което исках: ръководство, изключително за тези два редактора, което да ориентира нов човек и им помагайте да избират между тях. Други материали в мрежата вършат чудесна работа за обхващане на историята, историята, историята и т.н. на двата редактора; същото е вярно и за клавиатурата и кривата на ранно обучение. Няма да покрия това тук. Вместо това ще се гмурна, защо можете да изберете един от друг.

Не бих казал, че имам куче в тази битка, но започнах с Emacs преди години, когато редактирах ръкопис, преминах на vim и го приемах ежедневно в продължение на няколко години и в крайна сметка се прехвърлих обратно към Emacs. Vim остави такова огромно впечатление върху мен, че всъщност забравих за моята по-ранна фаза на Emacs и трябваше да се върна и да коригирам този параграф, за да ви дам представа колко широко го използвам. Обърнете внимание, че vim означава „vi подобрен“ и в основата си може да бъде заменен с vi, във всеки контекст, където това е от значение (като Google търсения, където vi срещу emacs показва резултати vim срещу emacs не).

Ако хората ви кажат, че различните продукти са еднакво добри в едно и също нещо, тогава нямате механизъм да избирате между тях, освен „инстинкт на червата“ или много грубо доверие на един човек над другия. С риск от погрешно представяне на възможностите и на двамата редактори, ще „избера страни“ и ще ви дам да изразя мнението си кога трябва да използвате vim и кога трябва да използвате Emacs. Моля, обърнете внимание, че можете да създадете работен поток, който извлича почти същата функционалност от vim, която можете да извадите от Emacs, и обратно. От друга страна, ако сте на напреднало място, където само един или друг може да отговори на вашите нужди, тогава имате своя отговор. За повечето случаи на използване те се припокриват във функционалността.

За да ви кажа как използвам редактора си, прекарвам около половината ден в писане на имейли, а другата половина пиша фрагменти от кодове и скриптове в Ruby, Python, JavaScript или Lisp. Изпращам отговорите си чрез GET и POST към API - също направени чрез Emacs. Това ще оцвети моята перспектива, тъй като не ви давам да вземете най-добрия редактор за ситуации или езици, които не се отнасят към мен. С казаното, към бизнеса.

Vim

Първо, използвам Vim по различен начин от Emacs. Отварям vim в терминал почти всеки път, когато искам да редактирам файл, тъй като той се зарежда бързо и е бърз за използване. Има усещане, подобно на игра, както отбелязват и другите; след като научите натискането на клавишите, ще е забавно да се плъзгате около файла си с няколко докосвания от клавиатурата си.

Колко е трудно да се научиш? Не всичко е толкова трудно, тъй като нещата вървят (по-долу, да речем, испанска или гимназическа физика или Тъмни души). Има рязка крива на учене, ако започвате от нищо, но за щастие по-голямата част от тази крива е натъпкана през първите няколко часа.

Изображение, намерено в Интернет (съжалявам, не знам признанието). Забележете какво казва изображението vi / vim - най-трудно е да нахлуете в самото начало и плавно плаване след тази стена.

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

Това, което предлага vim, според мен е елегантно решение, което работи прекрасно, ако отделите време да го научите, направо извън кутията. Ако vim беше игра, това може да е нещо, направено от майстор дизайнер на играта Шигеру Миямото. Той наистина е добър в това, което прави; идеите му за това какви трябва да бъдат стойностите по подразбиране, как могат да изглеждат целите ви и как да ви преведе през вашите действия, като цяло са отлични. Като цяло ще научите много, ако можете да си позволите да се учите от него. Ще създадете ли по-добра игра от оригиналната Legend of Zelda? Дори и да го направите, все пак можете да се поучите от овладяването му на медиума.

Друго сравнение може да е с ножа на готвача: нещо „просто“, но елегантно и напълно подходящо за целта си. Vim ви създава това усещане, дотолкова, доколкото това може да е толкова главоблъскано и зверски, колкото редактор. Неговите клавиатурни връзки, по-специално, постигат много добър баланс между здрав, добре разположен, логичен за запомняне и лесен за достъп на вашата средна QWERTY клавиатура - но не забравяйте, че един редактор е повече от неговите връзки.

Също така, в тази епоха на AWS и виртуализирани Linux машини, vim е навсякъде. Ако завъртите нов екземпляр AWS, vim е там. Ако трябва да отстраните нечий журнал и имате достъп до тяхната машина, vim е там. Можете да влезете и излезете в рекордно кратко време и е отлично за лазерно внасяне на един герой от хиляди, извършване на промяна или редактиране и цип. Хирургическата точност е много голяма игра на Вим.

Но това не е всичко. Не е нужно да използвате vim по подразбиране, наличен начин (макар че това е солидно - Emacs има известен режим на имитиране на vim, наречен зъл режим, докато никой не се стреми да върне комплимента с режим emacs in vim) , Има много разработчици, които използват vim като IDE и той има помощ за синтаксиса, отговаряща на всички езици. Има плъгини и системи за управление на плъгини - цялата caboodle; други ресурси обясняват това по-добре, но въпросът е, че можете да персонализирате vim, използвайки плъгини и собствени конфигурационни файлове до голяма степен. Ако познавате vim, почти сигурно ще има добър повод да го използвате.

Трудно е да се правят трудни и бързи разграничения между два набора от функции, които вървят с пръст до петите толкова старателно, колкото Emacs и vim, но ще направя това субективно наблюдение. Помислете за по-ранното ми сравнение с ножа на готвача. В крайна сметка готвачът просто използва ножа като инструмент - чудесен инструмент, да, и много внимателно подбран, но все пак, инструмент, който е второстепенен за реалната работа, която е нейният фокус. В това сравнение на vim, това често се проявява като потребители на vim, които разбират vim толкова дълбоко, колкото е необходимо, но в крайна сметка разглеждат vim като средство за постигане, а не като цел само по себе си.

Изображение на готвач в Chez Panisse

Emacs, от друга страна ...

Тъй като това беше нещо, което не ми беше ясно, когато започнах да използвам Emacs, трябва да го изписвам тук: вие не използвате vim, както използвате Emacs. Когато използвах vim в терминала, щях да го отворя десетки, ако не и стотици пъти на ден. Възможно е по-добре да отваряте файлове в vim в раздели или прозорци, но това беше толкова бързо, че никога не чувствах нуждата и харесвах затварянето на отварянето и затварянето, тъй като нямаше режийни разходи. (Това е част от причината, поради която е толкова добре с tmux или виртуални конзолни / терминални системи за мултиплексиране). Emacs зарежда с забележимо закъснение от 2–3 секунди, така че ако го сравните с vim, като го използвате като че ли е vim и го зареждате 10 пъти за час във вашия терминал, ще се чудите защо някой би приел това изпълнение удари.

Отговорът е, че не го правят; правиш го грешно. В emacs отваряте редактора си само веднъж, в началото на работния ден. След това можете да отворите терминала вътре в Emacs, като използвате режим shell или eshell. Забележете превключвателя: вместо да стартирате vim в терминала си, сега стартирате черупката си в Emacs. Или по-грубо: терминалът изпълнява vim плюс други неща, докато Emacs изпълнява терминал плюс други неща. С течение на времето, както предполага този подход, все повече и повече неща се консолидират в Emacs; тенденцията е потребителите на Emacs да „живеят вътре“ в Emacs и да се впускат навън само за поръчки и грешни задачи (да речем, да проверят как нещо се превръща в браузъра Chrome).

Но не е ли Emacs редактор? Интервю, домакин на великия Сача Чуа, веднъж описа Emacs като виртуална машина на Лисп и мисля, че това е много полезна рамка за него.

Лично аз смятам Emacs за следващата логична стъпка за хората, които казват „Обичам командния ред“ или „Прекарвам толкова време, колкото мога на командния ред.“ Emacs е там, за да активира предпочитанията на вашия команден ред - и вземете то на следващото ниво. Сега можете да имате неограничен контрол върху персонализирането на клавиатурата и на всичкото отгоре можете директно да програмирате средата си, използвайки Lisp персонализации (макар че има много полезни опростяващи магии, поръсени в почти всички, не е нужно да създавате компилатор от нулата, за да стане това реалност или нещо подобно свръхчовешко).

С Emacs получавате тази голяма, без етикет кафява кутия. Вътре кутията е пълна с конфитюр с инструменти, опакована плътно в тяхното пространство. Много от инструментите изглеждат много функционални и не особено вдъхновени, но те вършат работата и това е колективната сила на тези инструменти, което е геният на редактора. Металната пръчка, сама по себе си? Скучно е. Но използвайки това в машина с приставки за пробиване на дупки, полагане на кабели и изкопаване на сърцевини ... това е мястото, където Emacs може да ви отведе.

Ако Emacs беше игра, това щеше да е нещо като Minecraft, с изключение на вероятно по-груба около краищата и по-модно фокусирана. Това е отворен свят. Това отваря много възможности, огромно пространство за творчество и пионерство - но също така, и тона пространство за не особено продуктивно лутане-около-нищо-нищо. Ако ножът на готвача не ви интересува, ще го сложите и ще направите нещо, което не се готви. Но ако отлагате, Emacs предлага изкушението на безкрайните (ненужни) възможности за персонализиране.

Но на практика често е много трудно да се каже разликата между излишната свръх-оптимизация и научаването за системата по начин, който ще се изплати по-голям начин, по-късно надолу по линията.

Ами ако скалната стена вляво имаше… друга дупка…

За мен Emacs ми позволи да тъка Emacs Lisp, скриптов език (резервно копие за това, което не бих могъл да направя с моите познания за Lisp) и API в сплотено цяло, което ми улесни структурата и разсъжденията за моята работа. Освен това улесни разделянето и ескалирането на проблеми, като използвах собствените си критерии; Успях да наложа структура на нещо, което често ми се струваше безформена бъркотия и да изградя много по-различно представяне от това, което би трябвало да приемам чрез потребителски интерфейс на трета страна.

Emacs не направи това еднозначно възможно, но направи много, за да го направи естествен, инкрементален процес. От друга страна, трябва да призная, че има истинска опасност от колоездене и безсмислено заглеждане на пъпа с Emacs, които просто не възприемам като съизмерим риск с vim.

И накрая, незначителна приказка: тъй като Emacs се опитва да се натъпче толкова много в ограничена клавиатура, клавишите са по-близо един до друг и ми е малко по-стресиращо на пръстите. Има само ограничение за това колко клавишни връзки можете да натъпчете в малко пространство и с Emacs се приближавате много близо до него.

Заключения

В моя случай имаше чувството, че съм натиснал vim толкова силно, колкото има смисъл да отида за моя спокоен случай и да премина на следващото ниво, трябва да се науча да програмирам самия редактор. Това означаваше VimScript или Emacs Lisp, и това беше лесен отговор по гореописаните причини. Също така почувствах, че Emacs има статут-y фурнир, за който също бих могъл да се науча отвътре, в горната част на сравнението на светлинния меч, за да достигна до собствената си преценка (окончателно заключение: ъъъ).

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

На хартия еквивалентът в vim не звучи много по-трудно: пренасочване на JSON изход към файл; отворете файла; копирайте реда и отворете друг файл и го поставете - вероятно от порядъка на секунди, и в двата случая. Но на практика този опит в Emacs се чувства по-гладък и малко по-естествен; никога не се сблъсквате с този проблем, при който смятате, че не е нужно да изпращате изхода на по-малко, например, и сега не можете да видите това, което сте искали, защото се превърта твърде далеч нагоре и го няма (в този случай: пренасочване на изхода към файл…). Това не е голяма работа, но ми се струва, че Emacs "смазва колелата" на моето използване на терминала и го прави малко по-удобно.

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

Искам да избегна лоша дихотомия, която виждах подразбираща се, където vim е мистрия за тъпите работници, а Emacs е светлинният меч на гениалните инженери. Първо: не. Второ, ако това изглежда вярно в моята презентация, аз персонализирах Emacs повече, отколкото направих vim. Можете лесно да персонализирате използването на vim повече от обикновения потребител на Emacs; В крайна сметка се спрях, защото когато стигнах до това ниво на персонализиране, реших, че е за предпочитане да инвестирам това време за учене на Lisp (в диалекта си на Emacs), отколкото VimScript (който се използва никъде извън vim и няма валута на пазара ). Тъй като беше по-лесно да прескочите от Emacs Lisp до, да речем, Clojure, отколкото от VimScript към всичко друго, това реши.

За читателя се надявам, че това предоставя полезен контекст за това как да мислите за тях и някои съвети как можете да растете с редактора си във времето. Долна линия: Харесвам повече vim, когато не е конфигуриран, за бързи, бързи промени и за преминаване в права линия към предварително определена цел; Харесвам Emacs повече за полупродуктивния, полузабавен, наполовина изключен потенциал на неговите режими и възможности за Lisp, които в хода на кариерата си имат по-голям потенциал. Лично аз също бих искал да видя общността на двете да се разширява по размер и лично съм инвестирала в това да видя повече статии на Emacs Lisp, които се появяват, така че се надявам тази статия да играе своята роля.

Окончателен отказ от отговорност и хумористичен анекдот: преди известно време работих с човек, който беше посоченият човек на Emacs, докато бях човек на vim. Той ще ме раздразни, когато най-накрая науча Emacs и бих казал - Все още в списъка с кофи. Смених работни места и в период на преход го вдигнах; не много отдавна се натъкнах на него на обяд и трябваше да водим нашия дългоочакван разговор с Emacs.

Ето моето голямо разкритие: казах, че характеристиките на убиеца са функции на Emacs Lisp и снаряда, очаквайки той незабавно да се съгласи, че и те са негови победители. Вместо това той каза: „О, никога не ги използвам.“ Той имаше предвид; те бяха нули в неговата книга за действително използване. За него това бяха макроси, които аз прегледах и не намерих голяма полза за мен лично. Така че, никога не знаете; в крайна сметка това е много личен избор. Опитайте и двамата да опитате и отидете с любимата си.