TextMate有一个很好的功能,允许您从当前上下文中执行脚本,并在单独的窗口中显示输出.这使您可以随时编写和测试代码.我几乎可以肯定MacVim/gVIM有类似的功能,但我不确定它是什么.目前我将缓冲区保存到磁盘,然后转到命令行并在这方面执行脚本.如何使用vim改进该工作流程?
小智 70
您可以使用该!
命令在vim中执行此操作.例如,要计算当前文件中的单词数,您可以执行以下操作:
:! wc %
Run Code Online (Sandbox Code Playgroud)
%被当前文件名替换.要运行脚本,您可以在文件上调用解释器 - 例如,如果您正在编写perl脚本:
:! perl %
Run Code Online (Sandbox Code Playgroud)
cam*_*tus 16
vim教程:在Vim中映射键
您可以映射键,以便perl执行上面jts建议的当前脚本.
map <C-p> :w<CR>:!perl %<CR>
Run Code Online (Sandbox Code Playgroud)
将映射Ctrl + P写入文件并通过perl运行它
imap <C-p> <Esc>:w<CR>:!perl %<CR>
Run Code Online (Sandbox Code Playgroud)
让你在插入模式下调用它.
你的vim/home文件夹中应该有.vimrc(_vimrc for Windows)文件.它有关于vim应该如何表现的说明.
map <C-p> :w<CR>:!perl %<CR>
只是将Ctrl + p映射到的指令:
a)写入当前文件 :w
b)使用%(当前打开的文件)作为参数运行命令(perl) :!perl %
<CR>
在每个命令代表"回车"之后:执行特定命令的指令.imap与map相同,但在插入模式下侦听Ctrl + p.
这里的所有建议都只是展示:!{cmd} %
,它将当前缓冲区传递给 shell cmd。但是还有一个选项:write !{cmd}
,比如:write !sh
命令的作用是当前缓冲区的每一行都在shell中执行。
它通常很有用,例如,当您向缓冲区添加了几行,并希望立即查看执行结果而不先保存缓冲区。
也可以执行某个范围,而不是缓冲区的全部内容::[range]write !{cmd}
听起来您正在寻找!
:
:!{cmd}
{cmd}
用shell执行。
%
如果需要将其传递给脚本,则可以使用来表示当前文件名:
!proofread-script %
Run Code Online (Sandbox Code Playgroud)
您还可以使用!
范围,将命令用作过滤器:
!{motion}{filter} " from normal mode
:{range}!{filter} " from command mode
Run Code Online (Sandbox Code Playgroud)
(在第一种情况下,与许多其他命令一样,当您键入动作时,它会将您传递到命令模式,将动作转换为一个范围,例如:.,.+2!
)
最后,如果您实际上不需要从文件中传递输入,但希望在文件中输出,那本质上是一个微不足道的过滤器,最快的方法是!!{cmd}
. 这将用命令的输出替换当前行。