Bash

在 bash/readline 中按空格分隔的單詞移動

  • April 25, 2022

在 bash 行編輯中(或在任何使用 GNU readline 的程序中),Meta-f 向右移動一個“單詞”,Meta-b 向左移動一個“單詞”,其中“單詞”由字母組成和數字。這些是forward-wordbackward-word命令。(Meta-f 可以是 Alt 修飾鍵或前綴 Escape 鍵。)

例如,如果我輸入了

cat /etc/motd

然後重複輸入 Meta-b 將游標移動到m,然後是e,然後是c.

是否有類似移動的命令,但由空格分隔的單詞,所以/etc/motd是單個單詞?

(我經常使用很長的文件路徑,我希望能夠輕鬆地跳過它們。我的解決方法是重複鍵入現有的單詞移動命令,或者鍵入 ^X ^E 來啟動編輯器。 )

在 vim 中,wb單詞前後移動,並按W空格B分隔的單詞移動。我正在尋找類似的東西。

我查看了readline文件,我懷疑答案是否定的,但也許我錯過了一些東西。

如果你這樣做了,set -o vi那麼 readline 將採用vim樣式命令,並且w/Wb/B將具有與 Vim 本身相同的 word/WORD 行為。在編輯命令行時,我經常使用W/B跳過完整路徑、url 等。我從輸出中bind -l看到 readline 命令綁定到WandBvi-forward-bigwordand vi-backward-bigword

或者,我們有shell-forward-wordshell-backward-word。根據 bash 手冊頁,這些命令由shell 元字元移動,這些元字元是在不加引號時分隔 words的字元。因此,它們比vi-*-bigword命令更“激進”,但對於跳過長路徑,它們幾乎總是能做到這一點。

因此,例如,您可以這樣做bind '"\C-x": shell-backward-word'並且Ctrl+x將按照描述的方式執行。

引用自:https://unix.stackexchange.com/questions/396612