Shell

zsh 鍵綁定:對整個引用的字元串進行反向殺詞

  • August 20, 2021

當使用Ctrl+wAlt+BackspaceAlt+d鍵盤快捷鍵向後/向前刪除單詞時,我知道我可以定義 WORDCHARS 字元:

WORDCHARS='~!#$%^&*(){}[]<>?.+;-'

例如,Ctrl+w從這個字元串的末尾開始使用,將依次刪除每個單詞

echo aaa bbb ccc ddd eee

但是如果我引用了字元串,我如何將整個引用塊視為一個實體?

echo 'aaa bbb ccc' 'ddd eee fff'

所以,Ctrl+w應該一次性刪除整個“ddd eee fff”。對於用雙引號引起來的字元串應該有同樣的行為"

shell字樣式正是這樣做的。

autoload -U select-word-style
select-word-style shell

我認為您需要留出空間,WORDCHARS而且似乎沒有辦法圍繞它們的使用定義規則,我不確定有沒有辦法讓它發揮作用。也許有一種方法可以定義命令行可以引用的自定義 Emacs 宏。如果有辦法做到這些,那超出了我的熟悉程度,我很樂意聽從知情人士的意見。

不是你想要的答案

這不是對所提出問題的直接答案,但您可以按照您描述的方式使用內置功能(注意事項)來做一些事情:

將行編輯器方法更改為vi

set -o vi

然後你可以試著記住輸入這個小美女:

Esc``2``d``F``"``xEsc``2``d``F``'``x根據使用的報價。

它並沒有真正從手指上滾下來,但如果你願意,你至少可以按下來.重複。

注意事項

它只是向後搜尋兩次以查找給定引用的實例並刪除所有阻礙(不了解語法、上下文等)。鑑於這是您的命令行,並且您的游標位於末尾:

echo "foo bar" baz

你最終會得到

echo<space>

或者如果你從

echo "foo bar" baz "boz

你最終會得到同樣不是我想要的東西

echo "foo bar

在開始輸入之前,您需要處於vi模式,因此您必須在您的個人資料或類似的地方進行設置。

vi命令行中作為編輯器是一種範式轉變,可能會與肌肉記憶作鬥爭——這看起來真的不是很有趣。

所以…

我可能會堅持Ctrl``W自己砸幾次。

如果您不小心過度使用它,總會有 undo Ctrl``_

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