VIM:同时保存并运行?

Nop*_*ope 43 python vim

我做了很多Python快速模拟的东西,我不断保存(:w)然后运行(:!!).我想知道,有没有办法结合这些行动.也许是一个"保存并运行"命令.

谢谢你的帮助.

Dou*_*yle 66

好的,您正在寻找的最简单的形式是管道命令.它允许您在同一行上运行多个cmdline命令.在你的情况下,这两个命令是写`w`并执行当前文件`!%:p`.如果你有一个特定的命令,你运行当前文件,第二个命令变为,例如`!python%:p`.那么,对你问题最简单的答案就是:

:w | ! %:p
 ^ ^ ^
 | | |--Execute current file
 | |--Chain two commands
 |--Save current file
Run Code Online (Sandbox Code Playgroud)

最后要注意的是,并非所有命令都可以链接.根据Vim文档,某些命令接受管道作为参数,从而打破链条......

  • 全部在一个命令中。这是我要寻找的答案,而不是脚本或映射。我不知道 `|` 被用来链接命令。谢谢! (2认同)

gah*_*ooa 28

选项1:

编写与此类似的函数并将其放在启动设置中:

function myex()
   execute ':w'
   execute ':!!'
endfunction
Run Code Online (Sandbox Code Playgroud)

你甚至可以将一个关键组合映射到它 - 看一下文档.


选项2(更好):

查看重新映射击键的文档 - 您可以通过简单的密钥重映射来完成它.以下工作,但有"filename.py"硬编码.也许你可以挖掘并弄清楚如何用当前文件替换它?

:map <F2> <Esc>:w<CR>:!filename.py<CR>
Run Code Online (Sandbox Code Playgroud)

映射后,您只需在命令模式下按F2即可.

imap,vmap等...是不同模式的映射.以上仅适用于命令模式.以下应该也可以在插入模式下工作:

:imap <F2> <Esc>:w<CR>:!filename.py<CR>a
Run Code Online (Sandbox Code Playgroud)

VIM手册的第40.1节非常有用.

  • 刚刚测试过 效果很好.将"map <F5> <Esc>:w <CR>:!%:p <CR>"添加到vimrc(不带引号). (7认同)

str*_*ger 12

使用autowrite选项:

:set autowrite
Run Code Online (Sandbox Code Playgroud)

在每个文件中写下文件的内容(如果已修改):next,:rewind,:last,:first,:previous,:stop,:suspend,:tag,:!,:make,CTRL-]和CTRL- ^命令[...]


Dim*_*iuc 5

命令组合似乎通过|字符工作,所以也许像别名 :w|!your-command-here到一个独特的键组合?


Roo*_*ook 5

干得好:

:nmap <F1> :w<cr>:!%<cr>

保存并运行(你必须处于n模式 - 只需添加esc和a for i模式)