假设我当前的行是:
/tmp/path/to/file:123
现在我在这一行的末尾,现在我想:123
通过按某个组合键来删除,这可能吗? (冒号只是作为一个例子提到的,它可能是其他字符,只是想知道我是否可以绑定键来做到这一点)
它与alt+的作用类似Backspace,但在单词分隔符上更具体。
Bash 或 zsh 都受到欢迎。
答案1
向后搜索,然后:
删除到行尾:Ctrl++ R :
Alt。+是历史搜索命令,您正在编辑的行是历史记录的一部分。大多数命令(包括+ )都会终止增量历史搜索并具有通常的效果。DCtrlRAltD
在 vi 模式下:F:C
这适用于 bash 和 zsh(在默认配置中,我不保证 zsh 中不存在会使其做出不同反应的奇特选项组合,当然这假定默认键绑定)。
答案2
在 bash 中你可以尝试ctrl++alt来]启动该character-search-backward
函数,然后:.然后光标将移动到“:”,然后您可以键入alt+d来杀死当前单词的末尾。
如果您经常使用它,您可以在 中为其创建一个绑定~/.inputrc
。
这些是 readline 函数,并记录在 info: 中info readline
。
我认为没有办法在readline
不破解源代码的情况下改变人们对单词的理解。
答案3
据我所知以及我刚刚在 bash 3.2 上测试过的
alt+backspace 和 ESC+backspace 将删除第一个“奇怪”字符之前的单词。
ctrl+w 将删除直到遇到第一个空格。
据我了解,您不是在编写脚本,而是在打字时进行操作。
答案4
在 zsh 中,我可以使用 Emacs 快捷方式来完成此操作。上面的例子是 Alt-Backspace(或者M-DEL
Emacs 的行话)。
为此,我在.zshrc
. (注意网址——我是不是以此为功劳!)
## emacs cursor-word movement (not identical but close enough)
# also necessary for this:
# /usr/share/zsh/functions/forward-word-match
# (from http://stackoverflow.com/questions/10847255 )
autoload -U select-word-style
select-word-style bash
提到的文件如下所示:
emulate -L zsh
setopt extendedglob
local curcontext=":zle:$WIDGET" word
local -a matched_words
integer count=${NUMERIC:-1}
if (( count < 0 )); then
(( NUMERIC = -count ))
zle ${WIDGET/forward/backward}
return
fi
while (( count-- )); do
match-words-by-style
# For some reason forward-word doesn't work like the other word
# commands; it skips whitespace only after any matched word
# characters.
if [[ -n $matched_words[4] ]]; then
# just skip the whitespace and the following word
word=$matched_words[4]$matched_words[5]
else
# skip the word but not the trailing whitespace
word=$matched_words[5]
fi
if [[ -n $word ]]; then
(( CURSOR += ${#word} ))
else
return 1
fi
done
return 0