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

Open specific number of files in Vim with specific pattern from command line

例如,我想编写一个shell脚本来使用vim打开5个文件。在第一个选项卡中,仅显示第一个文件;在第二个选项卡中,其余4个文件分别显示在左上角、右上角、左下角和右下角。当前选项卡在第一个选项卡中。怎么做?如果我能用一行命令

1
vim -option file -option

会很好的。但我尝试了一点,但没能做到。你对此有什么建议吗?

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


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

脚本文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
:bl
:bf
:tabe
:n
:split
:vsplit
:wincmd l
:n
:wincmd j
:n
:n
:vsplit
:wincmd l
:n
:wincmd h
:wincmd k
:tabn

你可以这样称呼它:

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

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

每行增加说明:

请注意,拆分时,光标将停留在原始窗口上,每个窗口将显示不同的文件,这些文件可以使用:n:n独立导航。创建新窗口时,它将显示与创建窗口时所在窗口相同的文件。

正如我在评论中提到的,前两行是告诉Vim我们已经读取了每个文件,所以Vim不会在会话结束时抱怨"还要编辑4个文件"。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
: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)


根据操作规程,应在外壳上按完全相同的顺序进行:

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

如果您想在VIM启动后从第一个选项卡开始,可以添加一个最终的|:tabnext

注意,它也有点短,可读性更强(有目的性)。

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

享受。