Я использую bindkey -v
(для башкеров set -o vi
я думаю, что работает и в zsh) или в режиме vi (m). но меня беспокоит то, что у меня нет визуальной подсказки, чтобы сказать мне, находится ли я в режиме вставки или командном режиме. Кто-нибудь знает, как я могу заставить мою подсказку отображать режим?
44
CTRL+C
в режиме vi-command, запрос будет сброшен, но при этом вы увидите, что вы находитесь в командном режиме, когда вы действительно находитесь в режиме вставки.zle-line-init
всегда следует менять индикатор на режим вставки. По какой-то причине$KEYMAP
не обновляется должным образом при вызове zle-line-init.zle reset-prompt
удалит 1 (или больше) строк над приглашением (если ваше приглашение является многострочным) при перерисовке :( Для меня этоВы уже нашли,
zle-keymap-select
что выполняется при изменении режима. Вы можете использовать его для установки какого-либо другого визуального индикатора, отличного от приглашения, в зависимости от того, что ваш терминал поддерживает (и, конечно, ваш вкус в отображении индикатора режима).Существует стандартная возможность terminfo для изменения формы курсора. Однако некоторые терминалы отображают один и тот же курсор в обоих режимах. Идея Xterm о менее видимом курсоре состоит в том, чтобы заставить его мигать (и это должно быть включено с помощью
-bc
аргумента командной строки илиcursorBlink
ресурса).С некоторыми терминалами вы также можете изменить цвет курсора с помощью
print -n '\e]12;pink\a'
(по названию цвета) илиprint -n '\e]12;#abcdef\a'
(по спецификации RGB). Эти последовательности описаны в документации xterm, вctlseqs
файле; современные эмуляторы терминала обычно эмулируют xterm, хотя они могут не поддерживать все его функции.источник
main
заKEYMAP
вместоviins
, не знаю , почему.main
- это псевдоним дляviins
или вemacs
зависимости от того, думал ли zsh, что ваш любимый редактор был vi или нет, когда он запускался. Я думал, что он будет использоватьviins
при переключении режима обратноvicmd
, но кажется, что он используетmain
вместо этого. Обновлено.zle-line-init
(или любую другую альтернативу), такzle-keymap-select
как не вызывается, если нажатие клавиши enter меняет раскладку клавиатуры.Для людей, имеющих проблемы с использованием reset-prompt с многострочными приглашениями, это сработало для меня: http://zeitlens.com/posts/2014-06-29-howto-zsh-vi-style.html В сочетании с https: // stackoverflow.com/questions/3622943/zsh-vi-mode-status-line Я закончил тем, что сделал:
источник
Вы можете попробовать VimMode
источник
Это то, что я использую, чтобы изменить курсор между «Блоком» и «Лучом» в zsh:
(Протестировано с термитом , гном-терминалом и мат-терминалом )
источник
add-zsh-hook
следующим образом: gist.github.com/MatrixManAtYrService/...Другое решение для изменения формы курсора между двутавровой балкой и блоком (для подчеркивания используйте
\033[4 q
). Добавьте это к вашему~/.zshrc
.Изменено с https://bbs.archlinux.org/viewtopic.php?id=95078 . Протестировано в гном-терминале 3.22.
Обновить
Еще одно решение для изменения формы курсора можно найти здесь . Этот, очевидно, работает для iTerm2, который я не имею возможности протестировать, но добавляю его сюда на случай, если он пригодится кому-то еще. Окончательное дополнение к вашему
~/.zshrc
будетисточник
В настоящее время я использую Zsh с темой Bullet Train . Следуя примеру, приведенному в ответе Себастьяна Бласка , я получил следующий код
Это только изменит значение по умолчанию $ на буквы N в обычном режиме, а I - в режиме вставки.
Это изображение является примером, когда в обычном режиме я нажимаю Ctrl+ C:
источник
Вот еще одна версия, основанная на посте Себастьяна Бласка . Предполагалось, что это будет как можно более незаметно, так как во всех других решениях, которые я мог найти, использовались дополнительные строки, статус справа или добавленные символы.
Это просто меняет цвет
$
с белого на красный, когда включен нормальный режим. Отредактируйте подсказку по своему вкусуисточник
Версия для
oh-my-zsh
пользователейЕсть плагин для
oh-my-zsh
звонков,vi-mode
который можно найти здесь:robbyrussell / о-мой-ЗШ / плагины / VI-режим
Я использую Antigen для управления своими плагинами, поэтому включить его было так же просто, как добавить это в мой
.zshrc
:источник
ЗШ-ВИМ-режим плагин способен показывать индикатор для вставки, команды поиска, замены и визуальных режимов. Он использует базовую технику других ответов для подключения к различным хукам ZLE (zle-keymap-select, zle-isearch-update и т. Д.). Проверяет
[[ $ZLE_STATE = *overwrite* ]]
режим замены. Он проверяет,$REGION_ACTIVE
чтобы определить визуальный режим.Логика усложняется некоторыми причудами того, как ZSH запускает события при выходе из режима поиска.
Еще одна приятная особенность модуля - возможность менять форму и цвет курсора в зависимости от режима. Например, вы можете использовать вертикальную черту в режиме INSERT и мигающую подчеркивание в режиме SEARCH.
источник