用于打开在 Vim 中编辑的最后一个文件的别名

用于打开在 Vim 中编辑的最后一个文件的别名

我正在运行 Ubuntu 19.10,并尝试将命令“vv”设置为别名以在 Vim 中打开最后编辑的文件。以下是我运行命令“alias”的结果。

~/Documents/code$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias cls='clear'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'
alias sl='ls --color=auto'
alias vv='!vi'

我收到错误:

~/Documents/code$ vv
Command '!vi' not found, but there are 15 similar ones.

!v 和 !vi 已经是 Vim 中打开最后编辑的文件的有效命令,但我希望 vv 也能成为执行相同功能的命令,因为有时我很懒。

我尝试过的事情:

  • 使用新别名更新 ~/.bashrc
  • 重启电脑
  • 打开新终端

任何帮助都将不胜感激,谢谢。

答案1

发生这种情况是因为历史扩展执行 别名扩展

history您可以使用以下命令强制在别名中进行历史记录扩展:命令替换用其输出替换查询历史记录的命令:

alias vv='$(history -p !vim)'

但如果文件名包含可能触发扩展的字符(例如空格),则无法正确处理文件名。您可以使用eval

alias vv='eval $(history -p !vim)'

答案2

用这个:

alias vv="vim -c 'norm! ^O'"

norm执行正常模式命令^O,就像您输入它一样。:help :normal有关更多信息,请参阅。

^O是一个字符,您可以在插入模式下输入<C-V><C-O>。它会带您到最后一个光标位置,也就是您编辑的最后一个文件中。

所以上面的别名与打开 vim 并按 ctrl-o 相同。

相关内容