使用命令行中的特定模式在Vim中打开特定数量的文件

时间:2013-11-15 05:18:48

标签: bash shell vim multiple-files

例如,我想编写一个shell脚本来使用vim打开5个文件。在第一个选项卡中仅显示第一个文件,在第二个选项卡中,其余4个文件显示在左上角,右上角,左下角,右下角。当前选项卡位于第一个选项卡中。这该怎么做?如果我可以使用一行命令(如

)执行此操作
vim -option file -option

会很好。但是我尝试了一点但未能这样做。你有什么建议吗?


PS。我知道如何在vim中编辑多个文件。我每天都这样做。我现在要做的是从bash同时打开多个文件。是的,我知道bash中vim的-p和-O和-o选项。但它们以同样的方式迭代地打开文件,这不符合我的要求。我正在寻找的是构建shell脚本以满足上面指定的要求的方法。感谢。

2 个答案:

答案 0 :(得分:4)

您可以将这些配置放在自定义脚本文件中,然后可以选择使用该脚本文件打开工作区配置。

脚本文件:

:bl
:bf
:tabe
:n
:split
:vsplit
:wincmd l
:n
:wincmd j
:n
:n
:vsplit
:wincmd l
:n
:wincmd h
:wincmd k
:tabn

你可以这样称呼它:

vim -S script.vim file1.txt file2.txt file3.txt file4.txt file5.txt

这将根据你的配置在file1.txt上打开vim,旁边有一个打开的标签,当你切换到它时,将光标放在左上角的文件(file2.txt)上。

添加了每行的说明:

请注意,当我们拆分时,光标将保留在原始窗口上,并且每个窗口将显示不同的文件,可以使用:n:N单独导航。创建新窗口时,它将显示与我们创建窗口时所在窗口相同的文件。

正如我的评论中所述,前两行是告诉VIM我们已经读取了每个文件,因此VIM不会在会话结束时抱怨“还有4个要编辑的文件”。

:bl       Go to last file
:bf       Go to first file
:tabe     Create new tab
:n        Open next file (file2.txt)
:split    Split horizontally (will create new window below with the content of file2.txt)
:vsplit   Split vertically (will create new window on the top right with the content of file2.txt)
:wincmd l Go to the window to the right (which currently displays file2.txt)
:n        Open next file (file3.txt)
:wincmd j Go to window at the bottom
:n        Open next file (file3.txt, because bottom window was displaying file2.txt)
:n        Open next file (file4.txt)
:vsplit   Split vertically (will create new window on the right with content file4.txt)
:wincmd l Go to window to the right (which is bottom right)
:n        Open next file (file5.txt, because bottom-right window was displaying file4.txt)
:wincmd h Go to window to the left
:wincmd k Go to window above (this sets the cursor on file2.txt on top left)
:tabn     Go to next tab (the first one, displaying file1.txt)

答案 1 :(得分:1)

根据OP,它应该从shell完成,按照完全相同的顺序:

$vim -c ":edit first|:tabnew second|:vsplit third|:split fourth|:wincmd w|:split fifth"

如果您希望在Vim启动后来自第一个标签页,则可以添加最终|:tabnext

请注意,它也更短,更易读(有目的)。

用shell变量替换固定名称(第一个,第二个,......)将在许多其他项目中保持相同的工作流程。

享受。