"Ніколи не використовуйте клавіші зі стрілками у Vim!"
Я чув це від випадкового оратора, але не мав можливості запитати його, чому. Крім того, якщо ви не використовуєте клавіші зі стрілками, як ви можете перемістити курсор у режимі " Вставка" ?
"Ніколи не використовуйте клавіші зі стрілками у Vim!"
Я чув це від випадкового оратора, але не мав можливості запитати його, чому. Крім того, якщо ви не використовуєте клавіші зі стрілками, як ви можете перемістити курсор у режимі " Вставка" ?
Відповіді:
Використання клавіш зі стрілками вважається поганою звичкою, тому що якщо ви використовуєте клавіші зі стрілками, ви, мабуть, не вистачаєте у багатьох чудових функцій vim.
Коли люди вперше починають використовувати vim, вони, як правило, залишаються у режимі вставки, оскільки це більше схоже на звичайне редагування тексту. Щоб бути ефективним у програмі vim, ви повинні знаходитись у режимі вставки лише тоді, коли ви фактично вводите текст. Якщо ви хочете перемістити курсор, ви повинні знаходитись у звичайному режимі. Ви майже повинні знаходитись у звичайному режимі за замовчуванням.
У звичайному режимі є мільйон ярликів для пересування. Ви можете використовувати hjklдля переміщення по одному простору за один раз, або ви можете переміщуватися словами, абзацами тощо. Якщо ви перебуваєте в звичайному режимі, немає сенсу використовувати клавіші зі стрілками, а не hjklвони знаходяться далі.
Існує думка, що якщо ви використовуєте клавіші зі стрілками, ви використовуєте vim "неправильно". Правда полягає в тому, що vim має дійсно круту криву навчання, тому під час навчання ви робіть все, що робить вас здоровим. Коли я вперше почав використовувати vim, я все робив «неправильно», і у мене не було проблем з порушенням звичок, коли я дізнався більше команд vim.
Наприклад, коли я вперше почав, скажіть, що хотів змінити текст у лапках:
String mystring = "I want to change this";
Я б перейшов у режим вставки, перемістився до кінця рядка за допомогою клавіш зі стрілками, натиснув назад, поки рядок не пропав, і ввів новий текст.
Набагато кращий спосіб - покласти курсор кудись у рядку (звичайний режим), а потім натиснути ci". Це буде change in ". Це видалить все між цитатами і переведе вас у режим вставки, щоб я міг ввести новий текст.
ci<і ci)працюйте також, і вам не потрібно рухати рукою від клавіатури до миші. Якщо ви хочете перейти до початку дужок, а потім змінити вміст f(ci(працює.
/wantі натисніть клавішу Enter, щоб приземлитися на слово "хочу", а потім зробіть ci".
hjkl): відображення upі downдвома клавішами, які вертикально не відрізняються один від одного, не кажучи вже про лівий і правий клавіші ..... це трагічна демонстрація ідейно засліпленої зарозумілості.
Коротше кажучи, Vimвикористовує hjklключі як навігаційний інтерфейс, тому що це залишок старого терміналу "ADM-3A", на якому ці клавіші були позначені стрілками.

Оскільки
vimвін походить відvi, він використовує ті самі ключі hjkl.
Заміна літер на клавішах зі стрілками дозволяє переміщатися по тексту, не відводячи руки від стандартної конфігурації набору тексту . Це, мабуть, більш ефективно та швидше, ніж переміщення руки, щоб натиснути клавіші зі стрілками. Як зазначено у посиланні №2 (див. Ресурси), це ще не кінець переваг цього: VIM має багато інших ярликів, до яких можна отримати доступ, не рухаючи руками.
Є кілька дуже детальних і точних відповідей на 2 частини вашого запитання: з точки зору заміни клавіш зі стрілками я відповів швидко та коротко, проте на запитання про вставку , будь ласка, дивіться ресурси, перелічені нижче.
hjklне працюють у режимі вставки, тож як це відповідь на питання?
hjklvim, не говорить про те, чому хтось ніколи не повинен використовувати клавіші зі стрілками, так само як той факт, що я можу їздити на велосипеді на роботу, не пояснює, чому хтось скаже мені ніколи не бігати.
Цю дурну мантру часто повторюють машиністи-довірячі, для яких домашній ряд схожий на другий хребет, або друкарські машини, які не хочуть виглядати круто. Для друкарських машин, які не торкаються, домашній ряд просто не такий особливий, і трохи рухати правою рукою, щоб дістатися до стрілок, зовсім не проблема.
Важливо враховувати те, що люди, які повторюють цю мантру, пропонують використовувати замість цього.
Більшу частину часу вони наполягають на використанні hjkl.
Якщо ми не залишимо факту, що ці клавіші використовуються лише тому, що на клавіатурі, що використовується автором vi, не було фізичних клавіш зі стрілками, і, таким чином, будь-який аргумент проти клавіш зі стрілками є лише раціоналізацією, так hjklчи інакше, лише кращим, ніж стрілки. Так, єдиною перевагою використання hjklстрілок є те, що ви пропускаєте цей невеликий рух правої руки до та зі стрілок. Чи варто ця користь вартий клопоту - це ваш дзвінок.
Але рух правою рукою не є тим, чому використовувати лише стрілки неефективно. Це неефективно, оскільки вони стримують переміщення символів за символом та рядком за рядком, тоді як більшість рухів, необхідних для редагування тексту, мають значно більший діапазон.
Забивати стрілку праворуч 13 разів неефективно і нудно. Хіба що краще забити lключ 13 разів? Ні. Це так само дурно.
Тримати натиснутою правою стрілкою, поки не досягнете своєї мети, менш нудно, але вона схильна до помилок і майже така ж неефективна, як 13 ударів через необхідне та недетерміноване сповільнення в кінці. Хіба що краще тримати lнатиснуту клавішу? Ні, звичайно, ні.
На щастя, більшість наборів інструментів GUI надають такі комбінації, Ctrl+Rightякі дозволяють нам переходити слово за словом або переходити до EOL, до наступного пункту чи будь-чого іншого. Ці ярлики допомагають нам набагато швидше та розумніше орієнтуватися, ніж за допомогою одиночних стрілок. У нас те саме hjkl? Ні, ми цього не робимо. Ми можемо використовувати лічильник, якщо хочемо, але хто хоче рахувати символи для кожного руху? Робити 14kза допомогою relativenumberчудово, але як бути з горизонтальними рухами? Для великих рухів hjklнасправді гірше модифікаторів + стрілок. І вгадайте, що? Великі рухи - це те, що нам найбільше потрібно.
Але нам пощастило, улюблений редактор має десятки рухів, які кружляють навколо стрілок і hjkl : bBeEwW/?*#{}()і так далі. Ці команди незмірно більш розширені, ніж hjklі здебільшого набагато логічніші та інтуїтивніші, якщо ви звикли до Ctrl+Rightдрузів.
Перехід від <Right><Right><Right><Right><Right><Right><Right><Right><Right>до lllllllllабо навіть 9lдо смішного безглуздо.
Перехід від <Right><Right><Right><Right><Right><Right><Right><Right><Right>до <C-Right>набагато краще. Звідти перехід на wпростий і швидкий. Не потрібно <nop>стрілкам!
Якщо ці команди є більш корисними, потужнішими та інтуїтивнішими, ніж hjkl, чому в усьому пеклі так багато блогерів та коментаторів наполягають на заміні стрілок hjkl?
Я маю. Не маю уявлення.
На закінчення, hjklзнайдіть своє місце в нашому інструментосмузі, оскільки нам завжди доводиться рухатися двома символами чи лініями, але вони частіше, ніж дерево, яке ховає ліс. Будьте обережні, коли люди проповідують проти стріл: те, що вони вам можуть придбати, може бути зовсім не кращим.
hjkl це марно , але й hjklкорисні.
Інші описали, чому переважні інші способи переміщення курсору, але мало відповідей на питання, чому вважається поганою ідеєю використовувати клавіші зі стрілками?
Я думаю, що головна причина (і @Squeezy на це дещо натякає) полягає в тому, що ще в часи терміналів, таких як VT100, клавіші зі стрілками створювали послідовність втечі, яку інтерпретувала запущена програма. (Оскільки клавіші зі стрілками не представлені в ASCII, введення клавіш зі стрілками повинно повідомлятися якимось "спеціальним" способом.) Послідовність виходу зазвичай була чимось на зразок
ESC [ A
залежно від властивостей вашого терміналу, з'єднання та режиму курсору . Якщо ваша оболонка або ваша програма не були налаштовані належним чином для терміналу, вони б не зрозуміли послідовність виходу як клавішу зі стрілкою.
Коли я був у коледжі, входив до Ultrix за допомогою терміналів VT100, якщо я натиснув стрілку під час in vi у режимі вставки, ESCінтерпретуватимуться як «вийти з режиму вставки», а далі наступні [ Aінтерпретувались як команди у звичайному режимі . Очевидно не те, що користувач хоче чи очікує!
В даний час поводження з терміналами та клавішами зі стрілками здається більш надійним, особливо в середовищі GUI. Але ті ж проблеми все ж виникають при використанні vim через SSH або Telnet.
Використання клавіш зі стрілками нахмуриться, тому що змушує вас переміщати пальці від головного дому при використанні макета QWERTY та з накладки символів (?) При використанні Дворака або будь-якого іншого макета.
Клавіші зі стрілками виявляють проблему - це вже було відомо vi - на повільних з'єднаннях, як на модемі 1200 бод. Стрілка перекладається на послідовність ESC типу ESC a. Тепер, коли час між ESC і час стає занадто довгим, ви в кінцевому підсумку чуєте BEL (або бачите спалах) з подальшим режимом додавання. Це не з’явиться за допомогою hjklклавіш.
ESC [ A, що це ви маєте на увазі?
ESC [ Aє терміналом DEC VT-100 (термінал ANSI був сильно похідним від DEC VT-100) стрілка. IIRC, ESC Aбула стрілка ADM-3A або, можливо, стрілка DEC VT-52. Точка залишається незмінною, однак ESCсимвол, надісланий у складі клавіші зі стрілкою, легко переплутати з ESCвведеним вручну.
Щодо другого питання:
[I] Якщо ви не використовуєте клавіші зі стрілками, як ви можете переміщувати курсор у режимі "Вставка"?
Для того, хто є господарем, і тому нехтує клавішами зі стрілками, поняття "режим" так само не існує.
Ведучий додає новий текст, використовуючи не режим вставки, а скоріше повну команду вставлення або заміни, яка починається з коду опкода, наприклад i, oабо з cwякого йде текст корисної навантаження, і закінчується ESC. Команди мають синтаксис, і тому машина переходить через стани, приймаючи синтаксис команд, але в головній моделі редактора вони не створюють режиму. Те, що підмайстри наївно називають "режимом", - це майстру незакінчений стан команди, найбільш огидна ситуація, якої господар уникає.
Кожного разу, коли майстер реалізує, перебуваючи в середині команди вставки або заміни, цей текст повинен бути вставлений або видалений, крім іншого, у наступній позиції символу, зазначеній курсором, майстер скасовує команду вставки і розв’язує одну з десятків ефективних команди руху (вдаючись до низького рівня, hjklякщо явно не застосовується більш потужний спосіб).
Крім того, оскільки майстер рідко відволікається таким чином, щоб залишити команду незакінченою, майстер рідко, якщо ніколи, викликає звуковий сигнал редактора через запис зайвого ESCвиданого "про всяк випадок".
(Однак, коли мережа відстає або машина забивається, майстер пускає на ESCключ люто і багаторазово, як і всі інші.)
viкоманда вставки команди вставки - це режим, то, щоб справедливо, ми повинні ідентифікувати всі такі режими в інших редакторах і називати їх модальними. Наприклад, коли ми натискаємо на Ctrl-X в Emacs, ми перебуваємо в "режимі", коли можна, наприклад, натиснути Ctrl-S, щоб зберегти документ, який не буде працювати поза цим "режимом".
Так, з багатьох згаданих причин viспочатку було написано для використання hjkl, але " ніколи " - це досить велике твердження.
Я схильний модифікувати vim(та інші інструменти, якими я користуюся), щоб поводитись так, як я хочу. Це чудово працює на моїй машині, але як вбудований розробник, я не завжди можу вибрати те, що є на машинах, які я підтримую. Я зустрічаю старі машини, які мають лише hjklнавігацію vi. У кінцевому підсумку я отримую контрольні коди, вставлені у мій файл на секунду-дві, поки я знову не зламаю звичку і переходжу на hjkl.
Єдина поважна причина, яку я можу придумати, щоб "ніколи не використовувати стрілки у Vim!" це означає, що ви можете використовувати машини, які не справляються зі стрілками. Це відчувається як досить тонка причина сказати " ніколи ".
якщо ви не використовуєте клавіші зі стрілками, як ви можете перемістити курсор у режимі "Вставка"?
Основна причина, чому я заважаю людям користуватися стрілками, явно полягає в тому, що це дозволяє пересуватися в режимі вставки.
Однією з найдивніших проблем з навчанням vim для новачків є те, що команда відміни vim функціонує шляхом скасування останньої дії , а не останнього натискання клавіші . Багато моїх друзів залишаються у режимі вставки весь час, тому що ніколи не залишають причин залишати його. Коли вони запитують мене "Як я скасувати?" Я відповідаю "натисніть букву u з командного режиму", вони засмучуються, коли vim видаляє весь файл.
"Vim - це досить нікчемний текстовий редактор, якщо він не може скасувати речі правильно".
Важко користуватися інструментом, перш ніж ви навчилися.
Vim стає корисним лише після того, як ви навчилися ним користуватися. Сила vim полягає в тому, як ви можете сказати йому "зробити це знову" або "скасувати цю річ" або "робити це лише тоді, коли я натисну цю гарячу клавішу макросу" через підсвідому м'язову пам'ять. Якщо "ця річ" стає "введіть весь файл від початку до кінця", я згоден, vim зовсім не так корисний.
З цієї причини слід вводити текст лише тоді, коли ви знаходитесь insert mode. Уникнення клавіш зі стрілками - це лише один із способів, який допоможе вам швидше стати кращим користувачем vim.
Запуск vim під час обстрілу на моєму пристрої Android, на якому працює ssh демон в kbox, привів мене до виходу із зони комфорту. Оскільки емулятор терміналів Anroid на пристрої використовує кнопки гучності для заміни комбінацій спеціальних клавіш (ctrl + що завгодно), деякі клавіші, які я зазвичай використовую на клавіатурі, не працюють у цій ситуації.
Наприклад, клавіша Вставка не працює в цьому середовищі, тому я використовую Iдля переходу в режим вставки. Клавіша Esc, яку я зазвичай використовую для виходу з режиму вставки, також не працює, тому я ctrl + [замість цього використовую для втечі. Клавіші додому та кінця не працюють, як я звик. Натомість я покладаюся на ярлики 0та $ярлики, з якими я ніколи не переймався, щоб досягти початку чи кінця рядка.
У будь-якому випадку клавіші зі стрілками все ще функціонують, як зазвичай, у моїй ситуації, але приємно знати, що мінімалістичні комбінації клавіш там є.
Ось мої 2 ¢.
Робіть все, що вам комфортно. Якщо ви використовуєте різні редактори, можливо, простіше використовувати клавіші зі стрілками для послідовності.
З іншого боку, абсолютно геніальному vi (і vim) не потрібні спеціальні клавіші, за винятком, можливо. Можливо, ви могли зламати старий селектор IBM, який функціонує як термінал.
Інша річ, на яку слід стежити, - це те, що клавіші зі стрілками можуть працювати не так, як очікувалося. Я використовував термінали там, де вони не працювали. Я не впевнений, як саме вони реалізовані у Vim, але я впевнений, що це не рівномірно. Моя плямиста пам'ять навіть, схоже, нагадує одну реалізацію, де вони були реалізовані як макроси vim.
Назва гри з розширеними текстовими редакторами, здається, "рухається поспіхом" і зменшує витрачені / повторювані рухи. Існує деякий час , втрачений при переході від буквених клавіш на клавіші зі стрілками ( в залежності від розмірів клавіатури) , а потім назад до будинку поспіль. Але якщо ви можете дістатись до клавіші ESC лівою рукою в режимі перемикання на ружовий або безіменний палець, стає одним рухом рідини, і протягом сеансу редагування буде підвищена швидкість.
І це ключ до другої частини вашого запитання, вийдіть із режиму вставки, натиснувши ESC ліворуч та рухайтеся з hjkl правою. Зрештою, ви зможете це зробити, не пропускаючи ні ритму.
Це було сказано, що я ніколи не потрапляв з Vim, поки не спробував деякі згадані тут речі , найважливіше - розділ " Отримати ефективність: швидке відображення ".