"Никогда не используйте клавиши со стрелками в Vim!"
Я слышал это от случайного оратора, но у меня не было возможности спросить его, почему. Кроме того, если вы не используете клавиши со стрелками, как вы можете переместить курсор в режиме вставки ?
Ответы:
Использование клавиш со стрелками считается плохой привычкой, потому что если вы используете клавиши со стрелками, вы, вероятно, упускаете многие из прекрасных функций vim.
Когда люди впервые начинают использовать vim, они, как правило, остаются в режиме вставки, поскольку это больше похоже на обычное редактирование текста. Однако, чтобы быть эффективным в vim, вы должны находиться в режиме вставки только тогда, когда вы фактически вводите текст. Если вы хотите переместить курсор, вы должны быть в обычном режиме. По умолчанию вы должны быть в нормальном режиме.
В обычном режиме есть миллион ярлыков для перемещения. Вы можете использовать
hjkl
для перемещения по одному пробелу за раз, или вы можете перемещаться по словам, параграфам и так далее. Если вы находитесь в обычном режиме, нет смысла использовать клавиши со стрелками,hjkl
поскольку они находятся дальше.Существует мнение, что если вы используете клавиши со стрелками, вы используете vim "неправильно". Правда в том, что у vim действительно крутая кривая обучения, поэтому, пока вы учитесь, делайте все, что вам хочется. Когда я впервые начал использовать vim, я делал все «неправильно», и у меня не было никаких проблем, чтобы избавиться от привычек, как только я узнал больше команд vim.
Например, когда я только начинал, скажем, что я хотел изменить текст в кавычках:
Я бы вошел в режим вставки, переместился бы в конец строки с помощью клавиш со стрелками, нажимал клавишу Backspace, пока строка не исчезла, и вводил новый текст.
Гораздо лучший способ - поместить курсор в любое место строки (обычный режим), а затем нажать ci". Это будет
change
in
"
. Он удалит все между кавычками и переведет вас в режим вставки, чтобы я мог ввести новый текст.источник
ci<
иci)
работать так же, и вам не нужно перемещать руку с клавиатуры на мышь. Если вы хотите перейти к началу скобок, а затем изменить содержаниеf(ci(
работает./want
и нажать клавишу ввода, чтобы получить слово «хочу», а затем сделатьci"
.hjkl
): сопоставлениеup
иdown
2 клавиши, которые неотличимы по вертикали друг от друга, не говоря уже о левой и правой клавишах ... это трагическая демонстрация идеологически ослепленного высокомерия.Ключ Размещение
Короче говоря,
Vim
вhjkl
качестве интерфейса навигации используются клавиши, потому что это остаток старого терминала "ADM-3A", на котором эти клавиши отмечены стрелками.Новые привычки
Буквенная замена клавиш со стрелками позволяет перемещаться по тексту, не отрывая рук от стандартной конфигурации ввода . Возможно, это более эффективно и быстрее, чем перемещать руку, нажимая клавиши со стрелками. Как указано в ссылке № 2 (см. Ресурсы), это еще не все преимущества: VIM имеет множество других ярлыков, к которым вы можете обращаться, не двигая руками.
Ресурсы и режим вставки
Есть несколько очень подробных и точных ответов на 2 части вашего вопроса: что касается замены клавиши со стрелкой, я ответил быстро и кратко, однако для вашего вопроса вставки , пожалуйста, обратитесь к ресурсам, перечисленным ниже.
источник
hjkl
не работает в режиме вставки, так как это ответ на вопрос?hjkl
в vim, не говорит, почему кто-то никогда не должен использовать клавиши со стрелками, так же как тот факт, что я могу ездить на велосипеде на работу, не объясняет, почему кто-то сказал бы мне никогда не бегать.Эту глупую мантру часто повторяют машинистки на ощупь, для которых домашний ряд похож на второй позвоночник, или машинистка на ощупь, которые хотят выглядеть круто. Для тех, кто не печатает на ощупь, домашний ряд просто не такой уж особенный, и легкое перемещение правой руки для достижения стрелок вообще не проблема.
Важно учитывать то, что люди, которые повторяют эту мантру, предлагают использовать вместо этого.
Большую часть времени они настаивают на использовании
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
имейте их место в нашем инструментальном поясе, потому что мы всегда должны двигаться на 2 символа или линии, но это чаще всего дерево, которое скрывает лес. Остерегайтесь людей, проповедующих против стрел: то, что они приготовили для вас, может быть вовсе не лучше.источник
hjkl
это бесполезно , но иhjkl
полезны.Другие описали, почему другие способы перемещения курсора предпочтительнее, но мало что сказано для ответа на вопрос, почему считается плохой идеей использовать клавиши со стрелками?
Я думаю, что главная причина (и @Squeezy несколько на это ссылается) заключается в том, что еще во времена терминалов, подобных VT100, клавиши со стрелками создавали escape-последовательность, которая интерпретировалась запущенной программой. (Так как клавиши со стрелками не представлены в ASCII, ввод клавиш со стрелками должен передаваться каким-то «особым» способом.) Экранирующая последовательность обычно была чем-то вроде
в зависимости от свойств вашего терминала, вашего соединения и режима курсора . Если ваша оболочка или ваша программа не были настроены должным образом для терминала, они не воспримут escape-последовательность как клавишу со стрелкой.
Когда я учился в колледже, входя в Ultrix через терминалы VT100, если бы я нажимал стрелку в режиме vi в режиме вставки,
ESC
это интерпретировалось бы как «выйти из режима вставки», а затем следующие команды[ A
интерпретировались как команды обычного режима. , Очевидно, не то, что пользователь хочет или ожидает!В настоящее время обработка терминалов и клавиш со стрелками представляется более надежной, особенно в средах с графическим интерфейсом. Но те же проблемы все еще возникают при использовании vim через SSH или Telnet.
источник
Использование клавиш со стрелками не одобряется, потому что это заставляет вас отодвигать пальцы от homerow при использовании раскладки QWERTY и от панели символов (?) При использовании Dvorak или любой другой раскладки.
источник
Клавиши со стрелками показывают проблему - это было уже известно в vi - при медленных соединениях, как при модеме 1200 бод. Стрелка переводит в последовательность ESC, как
ESC a
. Теперь, когда время между ESC и a становится слишком длинным, вы в конечном итоге слышите BEL (или видите вспышку), а затем режим добавления. Это не появится сhjkl
ключами.источник
ESC [ A
это то, что вы имеете в виду?ESC [ A
стрелка - терминал DEC VT-100 (терминал ANSI был сильно производным от терминала DEC VT-100). IIRC,ESC A
был стрелкой ADM-3A или, возможно, стрелкой DEC VT-52. Точка остается той же самой, однакоESC
символ, отправленный как часть клавиши со стрелкой, был легко перепутан сESC
напечатанным вручную.По второму вопросу:
Для того, кто является хозяином, и, следовательно, кто презирает клавиши со стрелками, концепция «моды» также не существует.
Мастер добавляет новый текст , используя не режим вставки, а скорее полные вставки или замены команд , которые начинаются с кода операции , такие как
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, заставил меня немного выйти из зоны комфорта. Поскольку эмулятор терминала Android на устройстве использует кнопки громкости для замены специальных комбинаций клавиш (Ctrl + что угодно), некоторые клавиши, которые я обычно использую на клавиатуре, не работают в этой ситуации.
Например, клавиша Вставка не работает в этой среде, поэтому я использую
I
для переключения в режим вставки. Клавиша Esc, которую я обычно использую для выхода из режима вставки, также не работает, поэтомуctrl + [
вместо нее я использую escape. Клавиши Home и End не работают, как я привык. Вместо этого я полагаюсь на ярлыки0
и$
ярлыки, с которыми никогда раньше не сталкивался, чтобы достичь начала или конца строки.В любом случае, клавиши со стрелками все еще работают как обычно в моей ситуации, но приятно знать, что минималистские сочетания клавиш есть.
источник
просто напишите следующую команду перед тем, как писать в vim: -
одна проблема в том, что вам, возможно, придется писать это каждый раз.
источник
Вот мои 2 ¢.
Делай то, что тебе удобно. Если вы используете разные редакторы, может быть проще использовать клавиши со стрелками для согласованности.
С другой стороны, это замечательно, что vi (и vim) не нужны никакие специальные ключи, кроме, возможно,. Вероятно, вы могли бы взломать старый выбор IBM для работы в качестве терминала.
Другая вещь, на которую следует обратить внимание, это то, что клавиши со стрелками могут работать не так, как ожидалось. Я использовал терминалы, где они не работали. Я не уверен точно, как они реализованы в Vim, но я уверен, что он не одинаков. Моя пятнистая память даже напоминает одну реализацию, где они были реализованы как макросы vim.
источник
Название игры с улучшенными текстовыми редакторами, кажется, «движется в спешке» и уменьшает потерянное / повторяющееся движение. Существует некоторое время , потерянное при переходе от буквенных клавиш на клавиши со стрелками ( в зависимости от размеров клавиатуры) , а затем обратно к дому подряд. Но если вы сможете добраться до клавиши ESC левой рукой, то переключение режимов мизинца или безымянного пальца станет одним плавным движением, и в течение сеанса редактирования будет увеличение скорости.
И это ключ ко второй части вашего вопроса: выйдите из режима вставки, нажав ESC левой и двигайтесь с помощью hjkl правой. В конце концов вы сможете сделать это, не пропуская ни секунды.
Тем не менее, я ничего не получил с Vim, пока не попробовал некоторые из вещей, упомянутых здесь , наиболее важным из которых является раздел « Получить эффективные: сочетания клавиш »
источник