我正在尝试使用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将新文件打开到右侧(而不是左侧).
怎么样:help mksession
?
设置所有选项卡和窗口.
不要:mks /path/to/mysession.vim
将当前设置和布局保存到/path/to/mysession.vim
.
退出Vim.
打开Vim $ vim -S /path/to/mysession.vim
以恢复工作区.
您还可以使用$ vim -c "so /path/to/mysession.vim"
或在Vim运行时恢复您的会话:so /path/to/mysession.vim
.
至少有四种方法可以做到这一点:
vim -s <(echo $':vsplit A12.m\n:hsplit A22.m\n…')
Run Code Online (Sandbox Code Playgroud)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)vim -c 'vsplit A12.m | hsplit A22.m | …'
Run Code Online (Sandbox Code Playgroud)
您可以拥有多个-c
按顺序运行的键,但不能超过十个,因此您必须将命令连接到一个-c
带有条形的键.
而不是使用vim脚本的bash脚本:
#!/usr/bin/vim -S
vsplit A12.m
hsplit A22.m
…
Run Code Online (Sandbox Code Playgroud)
.然后你可以chmod +x
像任何其他执行文件一样运行它.#!
出于这个原因,Vim视为评论领导者.