Bash 如何使用C-xe调用VIM来执行长、复杂、复杂的命令?

Bash 如何使用C-xe调用VIM来执行长、复杂、复杂的命令?,bash,vim,editor,Bash,Vim,Editor,我发现了一个很棒的技巧,您可以“快速调用编辑器来编写长、复杂或复杂的命令”。然而,当我按下上面的组合键时,我打开了Emacs。我想把它换成Vim。如何使用C-xe调用Vim [1.布莱恩·坎贝尔解决的问题] 导出编辑器=vim 添加到.bashrc或相应的shell rc文件中 [2.多亏了Pax,问题才得以解决] 我无法将这个棘手的命令返回Bash。错误是: > Error detected while processing BufRead Auto commands for "*":

我发现了一个很棒的技巧,您可以“快速调用编辑器来编写长、复杂或复杂的命令”。然而,当我按下上面的组合键时,我打开了Emacs。我想把它换成Vim。如何使用C-xe调用Vim

[1.布莱恩·坎贝尔解决的问题]

导出编辑器=vim

添加到.bashrc或相应的shell rc文件中

[2.多亏了Pax,问题才得以解决]

我无法将这个棘手的命令返回Bash。错误是:

 > Error detected while processing BufRead Auto commands for "*":
 > E117: Unknown function: JumpToLastPosition
vimrc中的引号解决了第二个问题。我仍然不确定我的.vimrc中的部分:

  "  augroup misc
  "      autocmd!
  "      autocmd BufReadPost * call JumpToLastPosition()
  "      autocmd FileChangedShell * call WarningMsg("File changed outside of vim")
  "  augroup end
[3.问题]

.vimrc中的上述部分是做什么的

export EDITOR=vim

将您提供的链接添加到.bashrc或相应的shell rc文件中,其中包含以下答案:

下次使用shell时,请尝试键入ctrl-Xe(即按住control键,然后按x和e)。shell将把您目前在命令行上编写的内容粘贴到$editor指定的编辑器中

您需要设置编辑器环境变量(如@Brian Campbell)

在大多数Linux安装(我测试过的所有安装)上,bash可以识别Emacs和Vi命令历史键(或者您可以使用
“set-o Vi”
强制执行)

因此,您可以使用vi模式
“v”
进入可视模式,这将在Vim会话中开始编辑

要运行该命令,只需保存并退出Vim(
“ZZ”
“:wq”
)。要取消该命令,您需要删除内容,保存并退出(
“1GdGZZ”

除了通过退出来运行它之外,您还可以在编辑器中将其保存到另一个位置(
“:w/tmp/myscript”

请记住,视觉模式将与当前选定的行一起工作,因此您不必从空白命令(
“v”
)开始。您可以使用普通vi模式工具首先从历史记录中选择一条线,然后进入可视模式(
“kv”
用于最后一个命令,
“/grepnnv”
用于最后三个grep命令,依此类推)

使用此方法的优点是不更改可能用于其他事情的
“EDITOR”
变量(除非您希望Vim用于所有事情,这是采用IMNSHO的一个非常合理的位置)

更新:

关于您的错误,请在问题后发布:

JumpToLastPosition()
是Vim为所有文件调用的函数,用于将光标放置在上次编辑文件时的位置。我将假设您在编辑开始时,而不是退出时,实际收到了此错误,因为这是缓冲区读取后的自动功能

您能否在不发生此错误的情况下启动“正常”vim会话(
“vim xx.txt”
,然后再启动
“vim xx”
)?你可能会发现你也会遇到同样的问题(而且可能只是最后一个问题)


如果您确实有同样的问题,您需要查看启动文件。可能是BufRead的自动机器坏了。查看vimrc和filetype.vim文件,查看该函数的调用和/或定义位置(我怀疑该函数已调用但未定义,这可能是两个文件不匹配或其中一个文件已损坏)。

谢谢。问题是我无法将命令返回到bash。如何获取它?如果保存在编辑器中打开的文件并退出编辑器,命令将运行。我执行了ZZ,而我的命令“echo hello;touch{1..99};”没有执行任何操作。如何将输出重定向到stdout?我不能理解它的副作用。我不知道发生了什么事。您是否可以运行“脚本编辑器transcipt”,执行您正在执行的步骤,退出,然后将成绩单发布到在线的某个位置(不在此处,因为其中将包含控制字符)。这样我就可以准确地看到你在做什么。@UnixBasics-Hmm。很难说那里发生了什么,尽管看起来你的Vim给了你几个错误,所以你可能想检查一下你的配置。如果使用“vim somefile”手动执行,vim是否工作?如果没有,你应该问一个单独的问题。此外,将成绩单作为二进制文件上传到某个地方会比粘贴文本更有用,因为控制字符在其他方面会出错。这是一个好问题(也是一个很好的答案),但可能应该移到serverfault。不确定,@dmckee,长而复杂的复杂bash命令通常是完整的程序,它们恰好是在命令行中输入的:-)@UB,我在下面的回答中添加了一些更新的详细信息。@你说得对:“我将假设您在编辑开始时,而不是退出时,实际收到此错误,因为这是缓冲区读取后的自动功能。”+1查找关键点移动:“BufRead的autocmd可能以某种方式损坏。查看一下你的vimrc--“漂亮的修辞语气!”“编辑器”变量,它可能用于其他事情(除非你想让Vim用于所有事情,这是采取IMNSHO的一个非常明智的立场)。“.需要更多地查看Emacs:)