bash / readline для "просуватися вперед по пробілу слова?"


4

У bash / readline, якщо ви хочете переходити через команду, часто є такі речі, як:

cat /home/foo/bar.txt /home/bar/baz.txt

Якщо мій курсор знаходиться в кінці рядка (^ e), і я хочу повернутися до початку другого аргументу, як я переміщуся до (наступного / попереднього) пробілів?

У програмі Readline є вбудовані Meta-f(вперед) і Meta-b(назад), але вони зупинятимуться на перерізках шляхів, а не рухатимуться до пробілу.

vim має Wі Bщо це зробить, але режим переміщення vim не включений у режимі read / bash за замовчуванням.


Якщо ви знайомі vi, чому б не переключити (і залишитися) у viрежимі?
jlliagre

Відповіді:


10

Ви можете використовувати команди переміщення vim у readline / bash навіть у режимі руху emacs. Відповідними командами для зчитування є vi-fWordта vi-bWord. Ви можете прив’язати їх до комбінацій клавіш, таких як CTRL-fта CTRL-bіз наступним у вашому .bash_profile:

bind '"\C-f":vi-fWord'
bind '"\C-b":vi-bWord'

Зауважте, що подвійне цитування є суттєвим.

Ви можете підтвердити, що прив'язки працюють, запустивши bind -p


1
Оскільки мені подобається, що моя конфігурація readline повністю знаходиться в ~ / .inputrc, ви можете скинути прив'язку та оточуючі окремі лапки та додати її безпосередньо до ~ / .inputrc
Roshan

Якщо це допоможе комусь іншому, ви можете зайняти це роботою в рибній шкаралупі, додавши bind \cb backward-bigwordта bind \cf forward-bigwordдо свого~\.config\config.fish
timbram

5

Є команди Readline, які дозволяють вам переміщувати та обробляти такі слова, як оболонка, трактує їх для розщеплення: shell-forward-wordі shell-backward-word1 .

Якщо ви хочете прив’язати їх до Ctrl+ Meta+ fта Ctrl+ Meta+, bщоб уникнути перезапису існуючих прив’язок, ви можете використовувати

bind '"\M-\C-f": shell-forward-word'
bind '"\M-\C-b": shell-backward-word'

в командному рядку або додайте

"\M-\C-f": shell-forward-word
"\M-\C-b": shell-backward-word

у відповідний inputrcфайл (зазвичай ~/.inputrc).

Залежно від налаштування convert-meta, \M-його потрібно замінити на \e.


1 Введено в Bash 4.0.


1
Хороший матеріал! Зауважте, що ця функція була введена в bash 4.0, тому вона не працює на біржовій версії Mac OS Bash.
sitaktif
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.