我正在使用带有许多窗口的tmux
,而且我经常忘记在vim中编辑哪些文件。我想打开另一个shell,它运行一个脚本,告诉我vim当前正在编辑的文件的路径。
我正在运行Mac OS。
答案 0 :(得分:1)
我解决问题的方法是查询所有远程Vim进程的打开缓冲区。您可以使用Vim的 clientserver 功能。 GVIM服务器名称通常按顺序命名为:GVIM
,GVIM1
,...;对于终端Vim,你必须使用--servername
参数命名它们(例如通过shell别名)。
然后,您可以通过--remote-expr
参数查询打开的文件列表。循环遍历所有列出的缓冲区的简单表达式(如:ls
命令所示)是:
map(filter(range(1, bufnr('$')), 'buflisted(v:val) && ! empty(bufname(v:val))'), 'bufname(v:val)')
正如您所看到的,它有点涉及并可能会影响您启动Vim的工作流程。仔细想想你是否真的需要这个!
答案 1 :(得分:0)
我知道没有办法从外部进程获取每个打开的vim缓冲区。您可以使用vim
和:split
创建一个vim实例并编辑多个单独的文件,而不是使用单独的tmux布局和单独的:tabnew
实例来编辑多个文件。然后在该vim实例中,您可以使用:ls
查看相对于当前工作目录的所有打开文件的路径。 :pwd
也有效。
如果这不是您的风格,并且您仍然希望在单独的布局中使用vim
,则可以使用ps
查看每个vim
进程的参数并检查cwd这些过程。类似的东西:
paste <(pgrep vim | xargs pwdx) <(pgrep vim | xargs ps -o %a | sed 1d)
请注意,如果在vim中使用多个缓冲区,则上述操作不会很有效,因为它只会列出给每个vim
命令的参数,而不会列出实际的缓冲区。
答案 2 :(得分:0)
您可以使用管道命令ps -eF | grep vim
调整脚本。
在结果的每一行的末尾,您将看到处理与“vim”相关的任何事物的不同过程。因此,您将找到vim当前正在编辑哪些文件(例如'vim foo.txt'),以及为获得此结果而处于活动状态的'grep vim'。要获得漂亮的输出,您必须使用脚本过滤所有这些。
我希望这会对你有所帮助。