从外部(在终端中)启动 vim 打开文件

从外部(在终端中)启动 vim 打开文件

我有一个开始vim。我暂停了它(Ctrl+ Z)。所以我处于终端会话中,我想使用同一vim会话(新选项卡)打开一些文件。我可以在新vim会话中打开该文件。实际上,可以构建文件路径。例如,

vim `find $PWD -name build.xml`

是否可以在正在运行的 vim 会话中从托管终端会话中打开此文件?

答案1

问题在于Ctrl——Z

当您使用Ctrl-挂起一个进程时Z,该进程会收到一个SIGTSTP信号,并且所有执行都将停止(即不再有 CPU 周期),直到SIGCONT出现信号为止。vim暂停期间您将无法发送任何命令或输入。

换句话说,不要使用Ctrl- Z

然而,如果您已vim启用该clientserver功能进行编译,则可以使用--servername--remote-*选项:

使用vim --remote

vim第一次启动会话时,请使用vim --servername VIM [filename ...](如果您想从空白会话开始,文件名是可选的)。

让它在你的终端中运行。现在您可以通过命令从任何其他终端窗口、选项卡、机器等控制它vim --remote。打开文件(例如,文件.txt在现有会话的新选项卡中vim

vim --remote-tab file.txt

要使用vim的内部:tabfind功能(请参阅 参考资料:help find以获得更多信息):

vim --remote-send ":tabfind filename.txt<CR>"

要使用系统的find(1)程序,正如您在问题中所问的那样:

vim --remote-tab `find $PWD -name build.xml`

多次会议

您还可以指定不同的--servername,如果您愿意,这很有用多种的vim 会话。在这种情况下,您--servername每次都需要提供参数:

vim --servername HAMBURGER # Start new session named "HAMBURGER"
vim --servername HAMBURGER --remote-tab `find $PWD -name BACON`

当然,您可以将所有这些都整合到一个或两个 shell 脚本中,以节省一些打字时间。

答案2

从内部vim您可以使用:

:tabe `find $PWD -name build.xml`

答案3

尽管其他答案对我来说听起来更清晰,但作为黑客,您可以使用如下函数:

for-vim () {
  printf %s "$@" > ~/.for-vim &&
    perl -le 'require "sys/ioctl.ph"; ioctl(STDIN, &TIOCSTI, $_)
     for split "", "\e:tabe `cat ~/.for-vim`\r"' &&
    fg %vim
}

用作:

for-vim "$(find "$PWD" ...)"

它将文件路径存储在~/.for-vim文件中,并<ESC>:tabe ~/.for-vm<CR>在恢复之前使用 TIOCSTI ioctl() 将 a 注入终端的输入缓冲区vim

相关内容