Мне действительно нравится общая скорость zsh, но две вещи меня раздражают.
- Мне нужно подождать мгновение между нажатием клавиши «escape» и «косой чертой», чтобы перейти к поиску в истории (если он слишком быстро ударит по слешу
zsh: do you wish to see all 514 possibilities (172 lines)
) - После входа в режим вставки из-за нажатия
a
илиA
, я не могу вернуться назад после точки, в которой я вошел в режим вставки.
Я знаю, что 2 похожа на классический vi, но мне больше нравится стиль vim.
command-line
zsh
Чес. Owens
источник
источник
i
дважды нажимать, чтобы вернуться в режим вставки, я очень рекомендую это исправление!Ответы:
(1). По какой-то причине bindkey ведет себя странно, когда дело доходит до "/":
<esc>
после чего быстро/
интерпретируется как<esc-/>
. (Я наблюдал это поведение на днях; не совсем уверен, что его вызывает.) Я не знаю, является ли это ошибкой или функцией, и если это функция, если ее можно отключить, но вы можете обойти ее довольно легко ,С этим ключевым сочетанием, вероятно, связано
_history-complete-older
, что приводит к нежелательному результату - вы можете использовать,bindkey -L
чтобы увидеть, если это так.В любом случае, если вы не возражаете пожертвовать фактической
<esc-/>
(спрессованной, как аккорд) связью, вы можете перепривязать ее к команде поиска истории vi-mode, так что при вводе с<esc>
последующим вводом/
выполняется то же самое при любой типизации. скорость. знак равноТак как это будет восприниматься как аккорд, оно не будет иметь эффекта при первом входе в командный режим vi, поэтому сначала нужно убедиться, что это произойдет. Во-первых, вам нужно определить функцию; поместите это где-нибудь в свой,
fpath
если вы используете это, или поместите в свой .zshrc в противном случае:Остальное идет в вашем .zshrc в любом случае:
Должно быть хорошо идти.
(2). Вы можете исправить клавишу Backspace следующим образом:
Также, если вы хотите подобное поведение для других команд в стиле vi:
источник
^[/
не под\e/
, но это и то, и другое - правильный способ сказать побег. Изменение работает отлично. Теперь, когда я играю с ним более полно, похоже, что режим vi в zsh отстой по сравнению с режимом bash (или, по крайней мере, не полностью настроен по умолчанию). Одним из примеров этого является тот факт, что он переводит вас в режим вставки после истории поиска. Я должен вернуться в командный режим, чтобы нажать n, чтобы найти следующий элемент поиска..vi-history-search-backward
. Я напишу это и отредактирую свой ответ - проверьте позже сегодня.bindkey | grep <searchterm>
для любого из терминов, все они имеют префиксvi-
. Нужно ли настраиватьbindkey
команды без префиксаvi-
?Я собираюсь ответить только на вопрос (1).
Ваша проблема - KEYTIMEOUT. Я цитирую из zshzle (1):
Эти 0,4 секунды - это задержка, которую вы испытываете после нажатия ESC. Исправление состоит в том, чтобы установить KEYTIMEOUT вплоть до 0,01 с в одном из файлов запуска оболочки:
К сожалению, это имеет эффект: другие вещи начинают работать неправильно ...
Во-первых, теперь есть проблема в командном режиме vi: ввод ESC приводит к зависанию курсора, а затем любой символ, который вы вводите следующим, проглатывается. Это связано с тем, что ESC по умолчанию не связан ни с чем в командном режиме vi, но есть многосимвольные виджеты, которые начинаются с ESC (клавиши курсора!). Поэтому, когда вы нажимаете ESC, ZLE ждет следующего символа ... и затем использует его.
Исправление состоит в том, чтобы привязать ESC к чему-либо в командном режиме, таким образом гарантируя, что что- то будет передано в ZLE через $ KEYTIMEOUT сантисекунды. Теперь мы можем поддерживать привязки, начиная с ESC, в командном режиме без этих вредных последствий. Я связываю ESC с персонажем колокольчика, который я считаю еще менее навязчивым, чем само вставка (и моя оболочка заставлена замолчать):
Следующая проблема: по умолчанию есть некоторые виджеты с двумя ключами, начинающиеся с ^ X в режиме вставки vi; они становятся непригодными для использования, если $ KEYTIMEOUT установлен полностью вниз. Что я делаю, так это отсоединяю ^ X в режиме вставки vi (по умолчанию это самостоятельная вставка); это позволяет этим двухключевым виджетам продолжать работать.
Вы теряете привязку для самостоятельной вставки, но, конечно, можете привязать ее к чему-то другому. (Не знаю, так как мне это не нужно.)
Последняя проблема (которую я нашел до сих пор): Есть некоторые оставшиеся по умолчанию комбинации клавиш, которые мы «теряем» из-за установки $ KEYTIMEOUT прямо вниз, то есть: те, которые начинаются с ESC в режиме вставки vi, которые не являются клавишами курсора. Я лично связываю их, чтобы начать с ^ X вместо этого:
источник