我经常发现自己想要重复一个命令,虽然!!
很有用,但我想将它绑定到ctrl-w或类似的东西。有没有办法做到这一点?
编辑:我知道向上箭头做我想要的,但我宁愿不必离开主行。作为一个狂热的Vim用户教会了我留在家里的钥匙的价值。
我查看this post关于添加访问info
命令的快捷方式,并试图从中推断出一些内容,但没有成功。 Zsh对我大吼大叫,因为zle没有活动或什么的。
我知道这将依赖于我的shell配置方式的知识,所以下面我粘贴了一些相关代码,以及一般链接到我的整个.zshrc和dotfiles。
# oh-my-zsh plugins. zsh-aliases and drush are custom plugins.
plugins=( git z tmux web-search colored-man zsh-aliases drush)
ZSH_TMUX_AUTOSTART=true
#... $PATH, start background process (clipboard integration for tmux,
# glances system monitor), history options, editor, all truncated for brevity.
# use vim mode
bindkey -v
#show insert/normal mode in prompt
function zle-line-init zle-keymap-select {
RPS1="${${KEYMAP/vicmd/NORMAL}/(main|viins)/INSERT}"
RPS2=$RPS1
zle reset-prompt
}
zle -N zle-line-init
zle -N zle-keymap-select
# rebind ctrl-r
bindkey -M vicmd '^R' history-incremental-search-backward
bindkey -M viins '^R' history-incremental-search-backward
完整配置:https://github.com/yramagicman/dotfiles
只是.zshrc:https://github.com/yramagicman/dotfiles/blob/master/.zshrc
自定义插件:
答案 0 :(得分:0)
要从历史记录中获取最后一个命令,您可以使用up-history
小部件。这默认情况下绑定到 vicmd 模式中的 Ctrl + P ,因此按 Esc 后跟 Ctrl + P 然后 Enter (调用小部件accept-line
)就可以了。
如果要将其绑定到单个快捷方式,则必须编写自己的小部件。您可以将其添加到~/.zshrc
:
# define function that retrieves and runs last command
function run-again {
# get previous history item
zle up-history
# confirm command
zle accept-line
}
# define run-again widget from function of the same name
zle -N run-again
# bind widget to Ctrl+X in viins mode
bindkey -M viins '^X' run-again
# bind widget to Ctrl+X in vicmd mode
bindkey -M vicmd '^X' run-again
对于示例,我选择 Ctrl + X 作为快捷方式,因为默认情况下它在 vicmd 模式下未绑定并自行插入in < em> viins 模式,而 Ctrl + W 已绑定到 viins 中的vi-backward-kill-word
。当然,如果您不使用默认绑定或仅在模式下绑定窗口小部件,则可以覆盖默认绑定。
答案 1 :(得分:0)
编辑:不会破坏的替代方案 Esc / 搜索:
accept-line() { [ -z "$BUFFER" ] && zle up-history; zle ".$WIDGET"; }
zle -N zle-line-init
重新定义默认 Enter 命令,以便在缓冲区为空时插入最后一个命令。灵感来自this answer。
<强> ORIGINAL:强>
我在.zshrc
:
last_if_empty() {
[ -z "$BUFFER" ] && zle up-history
zle accept-line
}
zle -N last_if_empty
bindkey -M viins '^M' last_if_empty
如果屏幕上没有输入任何内容,它会将 Enter 重新映射到Run last command
。
不幸的是它似乎打破 Esc / 搜索(输入键不起作用)。我使用 Ctrl + R 所以它不会打扰我,但可能是一个破坏者。