Я использую свежую установку Ubuntu 16.04 с оболочкой bash. Есть две вещи, которые я хочу сделать:
- Настройте режим vi, чтобы у меня могли быть похожие на vim движения из терминала
- выйдите из режима вставки, набрав
jk
Я прочитал в другом посте, как это можно сделать zsh
, как я могу это сделать bash
?
ТЛ; др
положить bind '"jk":vi-movement-mode'
в свой .bashrc
файл после set -o vi
:)
server@thinkpad:~$ tail -n 2 .bashrc
set -o vi
bind '"jk":vi-movement-mode'
пожалуйста, смотрите ответ @ grochmal для более подробного объяснения
bash
keyboard-shortcuts
vi
mbigras
источник
источник
jk
? Это какая-то специальная клавиша на клавиатуре?.bashrc
обычно вызывается в каждой оболочке (например, если вы используете оболочкуvi
), но.bash_profile
вызывается только в оболочках входа в систему. Так.bashrc
что это правильное место дляset -o vi
. У меня нет ответа на ваш исправленный 2-й вопрос :-(set -o vi
Заходите.bashrc
, посмотрите, почему мой ~ / .bash_profile не работает?Ответы:
TL; DR
Bash имеет такую же функциональность,
zsh
«Sbindkey
черезbind
, но он не имеет несколькоvi
режимов , таких какzsh
. Послеset -o vi
вы можете сделать:что эквивалентно
zsh
'sbindkey -M <all vi modes> jk vi-movement-mode
В
vi-movement-mode
функции происходит отinputrc
(см/etc/inputrc
для списка из них).Полный текст
Как отмечает Стивен Харрис в своем комментарии:
.bashrc
вызываетсяbash
всегда (и особенно не другими оболочками)..bash_profile
вызывается только в оболочках входа в систему (и опять же, только в bash).Несколько дистрибутивов поставляются со
.bash_profile
скелетом, который выглядит следующим образом:Это хороший контент,
.bash_profile
потому что вы можете просто забыть о его существовании.Теперь на карту , jkчтобы Escв сессии оболочки, которая на самом деле не возможно. Когда вы делаете:
В Vim после ввода jVim знает, что ему нужно немного подождать, чтобы увидеть, печатаете ли вы kдалее, и должен ли он вызывать сопоставление (или что вы набираете другую клавишу, и сопоставление не должно запускаться). В качестве дополнения это контролируется
:set timeoutlen=<miliseconds>
в Vim (см.:h timeoutlen
).Некоторые оболочки или X11 не имеют такого контроля времени ожидания и не допускают сопоставления нескольких символов. Допускается только сопоставление одного ключа (но см. Примечания по поддержке ниже.).
Не читает
.vimrc
, он только имитирует некоторыеvi
(даже неvim
) комбинации клавиш, которые можно использовать в оболочке. То же самое можно сказать о-o emacs
, это не приходит с полной силойemacs
.поддержка Zsh
zsh
фактически поддерживает тайм-аут карты. И вы можете использовать следующую команду, чтобы отобразитьjk
на<esc>
:(Это нужно будет пойти
~/.zshrc
не~/.bashrc
)Тем не менее, я советую против этого. Я использую
vim
иzsh
большую часть времени. У меняinoremap jk <esc>
по моему ,vimrc
и я стараюсь , используяbindkey
комбинацию выше. при его использованииzsh
слишком долго ждет печатиj
, и это меня сильно раздражало.поддержка bash
bash
поддерживаетreadline
bind
. Я считаю, что этоbash
может быть скомпилировано без,readilne
поэтому могут быть некоторые редкие системы, которые имеют bash, которые не поддерживаютbind
(будьте внимательны). Для сопоставленияjk
с<esc>
вbash
вам нужно сделать:(да, это двойной уровень цитирования, это необходимо)
Опять же, это делает набор текста
j
довольно раздражающим. Но как-то менее раздражает, чемzsh
решение на моей машине (вероятно, время ожидания по умолчанию короче).Обходной путь (для оболочек не bash и не zsh)
Причина переназначения Escклавиши заключается в том, что она лежит довольно далеко от клавиатуры, и для ее набора требуется время. Хитрость, которую можно позаимствовать у
emacs
ребят, состоит в том, чтобы переназначить, CapsLockтак как в любом случае это бесполезный ключ.emacs
ребята переназначить его, Ctrlно мы переназначим его Esc.Давайте использовать,
xev -event keyboard
чтобы проверить код ключа CapsLock:И проверить функцию Esc:
Очень хорошо, CapsLockэто код клавиши 66 и Escфункция называется «Escape». Теперь мы можем сделать:
Выше должно быть сделано в этом порядке. Теперь каждый раз, когда вы нажимаете, CapsLockон работает как Escключ.
Сложная часть, где это установить. Файл
~/.Xmodmap
с содержанием:Должны уважаться большинством дистрибутивов (фактически диспетчерами дисплеев, но я говорю дистрибутивы для простоты), но я видел те, которые не уважают несколько
~/X*
файлов. Для таких дистрибутивов вы можете попробовать что-то вроде:По вашему
.bashrc
.(Теоретически это было бы лучше,
~/.xinitrc
но если менеджер дисплеев не уважает,.Xmodmap
он точно не будет уважать~/.xnintrc
.)Дополнительное примечание: Это только перераспределяет , CapsLockчтобы Escв сеансе X11, поэтому карта будет работать только в эмуляторах терминала. Актуальные
tty
не увидят карту.Рекомендации и дополнительное чтение:
.bashrc
против.bash_profile
источник
jk
вместоCapsLock
? Я установил его на моей машине OSX; однако, у меня нет этого до конца выходных, и я не могу вспомнить, как я это сделал :)zsh
:bindkey -v; bindkey -s jk \\e
. Но это то , что вернется и укусит вас обратно , когда вам нужноjk
, потому что таймер не настраивается и у вас нет<leader>
вzsh
.zsh
и нетbash
, это не возможно в Bash?man bash
я обнаружил,bind
что эта работа очень похожа наzsh
российскуюbindkey
. Я обновлю ответ. Вот, пожалуйста, я используюzsh
слишком много.Спасибо за предыдущие ответы, я использую это в моем ~ / .zshrc для vi-подобных ярлыков в моем терминале. Надеюсь, это кому-нибудь поможет.
источник