如何使用拆分和制表符编写一个bash脚本在Vim中打开多个文件?

Aer*_*ius 2 vim bash

我正在尝试使用bash脚本自动化一些手工劳动.基本上我用1个终端窗口(只有一个终端标签)用Vim打开多个文件,使用几个分割,vsplits和标签.我现在将描述一般情况来解释我通常手动操作的内容.

我使用3个选项卡(在这里称为A,B和C),我在2x2布局中的每个选项卡中打开4个文件:

bash:~$ cd ~/Workspace/
bash:~/Workspace$ vim A11.m
:vsplit A12.m
:hsplit A22.m
"move cursor to A12.m"
:hsplit A21.m
:tabedit B11.m
:vsplit B12.m
:hsplit B22.m
"move cursor to B12.m"
:hsplit B21.m
:tabedit C11.m
:vsplit C12.m
:hsplit C22.m
"move cursor to C12.m"
:hsplit C21.m
Run Code Online (Sandbox Code Playgroud)

我想要创建的是一个shell脚本,文件名和位置是硬编码的,在执行时会执行以上所有操作.任何人都可以向我建议一种方法,使这成为可能(如果可能的话)?提前致谢!

ps:在我的.vimrc中,我添加了一些配置:split在当前文件的下方(而不是上方)打开新文件,并且:vsplit将新文件打开到右侧(而不是左侧).

rom*_*inl 6

怎么样:help mksession

  1. 设置所有选项卡和窗口.

  2. 不要:mks /path/to/mysession.vim将当前设置和布局保存到/path/to/mysession.vim.

  3. 退出Vim.

  4. 打开Vim $ vim -S /path/to/mysession.vim以恢复工作区.


您还可以使用$ vim -c "so /path/to/mysession.vim"或在Vim运行时恢复您的会话:so /path/to/mysession.vim.


ZyX*_*ZyX 5

至少有四种方法可以做到这一点:

  1. vim -s <(echo $':vsplit A12.m\n:hsplit A22.m\n…')
    
    Run Code Online (Sandbox Code Playgroud)
  2. vim -S <(echo $'vsplit A12.m\nhsplit A22.m\n…')
    
    Run Code Online (Sandbox Code Playgroud)

    它类似于@romainl,但是您自己创建脚本并且不使用除bash脚本本身之外的任何文件(也可以只是历史记录中的别名或行).可以在bash中使用HERE字符串,它们更具可读性:

    vim -S <(cat <<<EOF
    vsplit A12.m
    hsplit A22.m
    …
    EOF
    )
    
    Run Code Online (Sandbox Code Playgroud)
  3. vim -c 'vsplit A12.m | hsplit A22.m | …'
    
    Run Code Online (Sandbox Code Playgroud)

    您可以拥有多个-c按顺序运行的键,但不能超过十个,因此您必须将命令连接到一个-c带有条形的键.

  4. 而不是使用vim脚本的bash脚本:

    #!/usr/bin/vim -S
    vsplit A12.m
    hsplit A22.m
    …
    
    Run Code Online (Sandbox Code Playgroud)

    .然后你可以chmod +x像任何其他执行文件一样运行它.#!出于这个原因,Vim视为评论领导者.