向后删除直到遇到一个字符,如 alt + bksp

向后删除直到遇到一个字符,如 alt + bksp

假设我当前的行是:

/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-DELEmacs 的行话)。

为此,我在.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

相关内容