例如,我想编写一个shell脚本来使用vim打开5个文件。在第一个选项卡中仅显示第一个文件,在第二个选项卡中,其余4个文件显示在左上角,右上角,左下角,右下角。当前选项卡位于第一个选项卡中。这该怎么做?如果我可以使用一行命令(如
)执行此操作vim -option file -option
会很好。但是我尝试了一点但未能这样做。你有什么建议吗?
PS。我知道如何在vim中编辑多个文件。我每天都这样做。我现在要做的是从bash同时打开多个文件。是的,我知道bash中vim的-p和-O和-o选项。但它们以同样的方式迭代地打开文件,这不符合我的要求。我正在寻找的是构建shell脚本以满足上面指定的要求的方法。感谢。
答案 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变量替换固定名称(第一个,第二个,......)将在许多其他项目中保持相同的工作流程。
享受。