5

Я использую терминатор вместе с рыбой, и я хочу использовать Alt-Left и т.д. Для навигации по терминатору и Ctrl-Left и Ctrl-right для перемещения курсора по слову. Проблема в том, когда я делаю

bind \cleft backward-word

это не меняет поведение Ctrl-влево или вправо. Похоже, это следует из документации, и я извлек ключ и команду из флагов -K и -f и

bind -a

показывает, что привязки существуют.

Я использовал ту же команду для других последовательностей, но я не могу заставить ее работать. Я что-то пропустил?

5 ответов5

4

Я исправил это с моей стороны. Это идет в конфиге:

bind \e\[1\;5C forward-word
bind \e\[1\;5D backward-word

"источник", выполнив:

. .config/fish/config.fish

("." является источником в рыбе)

Надеюсь, что это поможет вам!

3

тип bind \cleft backward-word в командной строке fish должен выполнить эту работу. Если вы хотите, чтобы он выполнялся при каждом запуске, установите:

function fish_user_key_bindings
    bind \cleft backward-word
end

в .config/fish/config.fish

Из рыбы вяжу документацию

Привязки клавиш не сохраняются между сессиями по умолчанию. Голые операторы связывания в config.fish не будут иметь никакого эффекта, потому что они поставляются перед настройкой привязок клавиш по умолчанию. Чтобы сохранить пользовательские привязки клавиш, поместите операторы связывания в функцию fish_user_key_bindings, которая будет автоматически загружаться.

1

Первое, на что нужно обратить внимание, это то, что Ctrl+стрелка влево не имеет никакого смысла и не может быть сделано в любой оболочке. Это потому, что клавиша ctrl фактически не отправляет никаких символов сама по себе (если вы не сделали что-то очень необычное для конфигурации вашего терминала). Эта клавиша изменяет следующую букву, которая нажимается. Например, ctrl+a заставляет терминал отправлять однобайтовое шестнадцатеричное значение 0x01. Поскольку такие клавиши, как стрелка влево, обычно отправляют последовательность символов, начинающуюся с символа esc , а escape - это уже управляющий символ, применение модификатора control к нему ничего не дает.

Как вы нашли обычный способ сделать это, используйте Alt. Если вы сконфигурировали свой терминал для обработки его как «мета-ключа», который ставит префикс перед последующим символом escape, вы можете нажать alt+page-up, чтобы терминал отправил \e\e[5~ . Если вы собираете fish из исходников git, вы получите удобную программу с именем fish_key_reader которая значительно упростит изучение того, какие ключи отправляются. Это будет в выпуске Fish 2.3.1, который должен появиться через пару недель.

Наконец, пользовательские привязки клавиш должны быть в вашем личном конфигурационном файле, а не в глобальном скрипте /usr/share/fish/functions/fish_default_key_bindings.fish . Вы должны создать файл с именем $HOME/.config/fish/functions/fish_user_key_bindings.fish со следующим содержимым:

function fish_user_key_bindings
    bind \e\[1\;5C forward-word
    bind \e\[1\;5D backward-word
end
0

Файл ~/.bash_profile для fish находится в ~/.config/fish/config.fish (если он не существует, создайте его). Чтобы запустить его при входе в систему, поместите это в файл config.fish:

if status --is-login
 bind \e\[1\;5C forward-word
 bind \e\[1\;5D backward-word
end
0

Принятый ответ почти сработал, но я обнаружил, что не могу заставить его автоматически связывать ключи через файл config.fish. В итоге я изменяю fish_vi_key_bindings.fish (который находится в /usr /share /fish /functions) напрямую.

Также недостаточно просто добавить ctrl-left и ctrl-right к обычному режиму в vi keybind, нужно также добавить вставку и визуальный режим.

bind \e\[1\;5C forward-word
bind \e\[1\;5D backward-word
bind -M insert \e\[1\;5C forward-word
bind -M insert \e\[1\;5D backward-word
bind -M visual \e\[1\;5C forward-word
bind -M visual \e\[1\;5D backward-word

Извините за это должен быть комментарий к принятому ответу, а не независимый ответ, но из-за того, что у меня недостаточно репутации, чтобы добавить комментарий (лично я не считаю эту систему репутации разумной), и я почувствовал, что следует поделиться этим с кем-то, кто сталкивается с той же проблемой, или для кого-то, кто имеет опыт, как решить проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .