使用外部编辑器编辑Zsh命令并替换原始命令

用户名

我在Zim中使用Zsh 我通过将以下内容放入,在Neovim中设置了用于编辑当前命令的键绑定.zshrc

bindkey -v
export VISUAL=nvim
autoload edit-command-line; zle -N edit-command-line
bindkey -M vicmd v edit-command-line

这样,当我完成命令编辑时,最终结果将放置在原始文件的下面,如下面的屏幕截图所示。

有两行的示例,每行有一个命令。

我想要的是最终结果替换了原来的行。这样做的主要原因是我使用的是启用瞬态提示的Powerlevel10k 此功能在特定情况下不起作用。

罗马·佩列佩里察(Roman Perepelitsa)

免责声明:我是Powerlevel10k的作者。

启用瞬态提示后,在外部编辑器中完成命令编辑后,Powerlevel10k应该截断提示。但是,事实并非如此。感谢您的举报,我已将其修复

现在回到您的原始问题。

我想要的是最终结果替换了原来的行。

您需要为此定义一个自定义的zle小部件。这是一个实现:

function edit-command-line-inplace() {
  if [[ $CONTEXT != start ]]; then
    if (( ! ${+widgets[edit-command-line]} )); then
      autoload -Uz edit-command-line
      zle -N edit-command-line
    fi
    zle edit-command-line
    return
  fi
  () {
    emulate -L zsh -o nomultibyte
    local editor=("${(@Q)${(z)${VISUAL:-${EDITOR:-vi}}}}") 
    case $editor in
      (*vim*)
        "${(@)editor}" -c "normal! $(($#LBUFFER + 1))go" -- $1
      ;;
      (*emacs*)
        local lines=("${(@f)LBUFFER}") 
        "${(@)editor}" +${#lines}:$((${#lines[-1]} + 1)) $1
      ;;
      (*)
        "${(@)editor}" $1
      ;;
    esac
    BUFFER=$(<$1)
    CURSOR=$#BUFFER
  } =(<<<"$BUFFER") </dev/tty
}

您可以使用与绑定相同的方法进行绑定edit-command-line

zle -N edit-command-line-inplace
bindkey -M vicmd v edit-command-line-inplace

请注意,这edit-command-line-inplace取决于edit-command-line不可能就地更新命令行的情况。例如,尝试键入echo 'first line,点击Enter然后调用edit-command-line-inplace无法更新命令的第一行,因此其edit-command-line-inplace行为与相同edit-command-line

编辑:edit-command-line-inplace我发布的第一个版本被明确调用nvim以编辑命令行。我已经更新了尊重VISUALEDITOR环境变量的代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在vim中执行打开默认编辑器命令

来自分类Dev

git:为单个命令选择编辑器

来自分类Dev

如何避免Vim错误消息“不是编辑器命令”

来自分类Dev

zsh命令行编辑器:输入命令时返回上一行

来自分类Dev

从管道命令启动编辑器

来自分类Dev

Vundle-E492:不是编辑器命令:PluginInstall

来自分类Dev

通过命令关闭变量编辑器

来自分类Dev

VIM:chmod命令不是编辑器命令

来自分类Dev

编辑器启动时的Webstorm运行命令

来自分类Dev

HUE查询编辑器给出“ dfs命令”错误

来自分类Dev

Bluefish编辑器错误:无法创建命令

来自分类Dev

无法在Zsh中编辑命令

来自分类Dev

E492:UltiSnips不是编辑器命令

来自分类Dev

为什么“ vi”命令打开“ vim”编辑器?

来自分类Dev

使用外部文本编辑器编辑VBA代码

来自分类Dev

如何在vim编辑器中添加命令?

来自分类Dev

我在“ vi模式”下使用Bash。使用外部编辑器编辑当前命令行的热键顺序是什么?

来自分类Dev

为什么vi编辑器的复制命令称为Yank?

来自分类Dev

git:为单个命令选择编辑器

来自分类Dev

如何避免Vim错误消息“不是编辑器命令”

来自分类Dev

zsh命令行编辑器:输入命令时返回上一行

来自分类Dev

从管道命令启动编辑器

来自分类Dev

Vundle-E492:不是编辑器命令:PluginInstall

来自分类Dev

通过命令关闭变量编辑器

来自分类Dev

编辑器启动时的Webstorm运行命令

来自分类Dev

如何设置编辑器命令在zsh中将* only *用于编辑命令行?

来自分类Dev

如何在ZSH中的全屏编辑器中编辑命令行?

来自分类Dev

如何在ZSH中的全屏编辑器中编辑命令行?

来自分类Dev

使用nano命令时,如何在文本编辑器而不是终端中编辑文件?

Related 相关文章

热门标签

归档