4

我正在尝试使用 bash 脚本自动化一些体力劳动。基本上,我使用多个拆分、vsplits 和选项卡在 1 个终端窗口(并且只有一个终端选项卡)中使用 Vim 打开多个文件。我现在将描述一个一般案例来解释我通常手动执行的操作。

我使用 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

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

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

4

2 回答 2

8

怎么样: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.

于 2012-09-13T15:43:19.353 回答
7

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

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

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

    vim -S <(cat <<<EOF
    vsplit A12.m
    hsplit A22.m
    …
    EOF
    )
    
  3. vim -c 'vsplit A12.m | hsplit A22.m | …'
    

    您可以拥有多个-c按顺序运行的键,但不能超过十个,因此您必须将命令-c与 bar 连接在一起。

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

    #!/usr/bin/vim -S
    vsplit A12.m
    hsplit A22.m
    …
    

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

于 2012-09-13T15:55:16.613 回答