

VIM学习笔记 静默执行命令(silent)
source link: http://yyq123.blogspot.com/2020/11/vim-silent.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

通常在使用!
运行外部Shell命令时,将显示提示信息“Press ENTER or type command to continue”,需要用户点击回车键才可以返回常规模式。
使用silent静默执行命令
如果不希望显示提示信息,那么可以使用:silent
命令:
:silent !echo 'Hello World'
如果需要清除命令本身及其输出信息,那么可以使用Ctrl-L快捷键或:redraw!
命令来重画屏幕。
您可以自定义命令,来合并以上两步操作:
:command! -nargs=1 Silent execute ':silent !'.<q-args> | execute ':redraw!'
使用以下自定义命令,将首先执行外部命令,然后重画屏幕:
:Silent echo 'Hello World'
通过结合:execute
命令,可以生成并执行较复杂的命令:
:silent exec "!command"
定义以下快捷键,在Linux下静默执行命令。比如使用eSpeak将文字转换为语音:
:nnoremap <leader>es :silent exec '!espeak "hello world" &'<CR>
定义以下快捷键,在Windows下使用默认程序打开当前文件。比如使用默认浏览器,打开当前编辑的HTML文档:
:nmap <Leader>x :silent ! start "1" "%:p"<CR>
后台执行命令
使用以下命令,可以利用Shell后台执行命令和重定向的能力:
:silent exec "!(ping www.vim.org >ping.out >2&1) &"
>ping.out
,即1>ping.out
,表示将命令的标准输出(stdout)重定向到名为“ping.out”的文件;因为默认值为1,所以可以省略;>2&1
,表示将“2”代表的标准错误(stderr)也重定向至“1”代表的标准输出(stdout);即标准输出和标准错误都输出至名为“ping.out”的文件;&
,表示在后台执行命令。
如果不希望外部命令输出任何信息,那么可以将标准输出指向空设备文件“/dev/null”:
:silent exec "!(ping www.vim.org >/dev/null >2&1) &"
也可以静默执行外部命令,并在新建标签页(Tab)内显示命令输出:
:silent exec "!(echo 'Hello World') > test.txt" | :tabedit test.txt
如果希望在分割窗口内显示命令输出,那么可以使用:split命令:
:silent exec "!(echo 'Hello World') > test.txt" | :sp test.txt
后台打开应用窗口
使用以下命令,将打开与当前文件同名的PDF文档。由于Zathura窗口在前台显示,所以无法在Vim窗口中继续进行编辑;关闭zathura窗口之后,也需要在Vim中点击回车键以返回常规模式:
:!zathura %:r.pdf
使用以下命令,将打开与当前文件同名的PDF文档。由于zathura窗口在前台显示,所以无法在Vim窗口中继续进行编辑;关闭zathura窗口之后,不需要在Vim中点击回车键即可返回常规模式:
:silent !zathura %:r.pdf
使用以下命令,将在后台打开与当前文件同名的PDF文档。由于zathura窗口在后台显示,所以无需关闭zathura窗口,也无需点击回车键,即可以在Vim窗口中继续进行编辑:
:silent exec '!zathura '.expand("%:r").'.pdf &'
实例:静默压缩文件
使用以下命令,可以使用Zip压缩当前文件:
:!zip test.zip %:p
屏幕将显示以下信息,并等待用户按回车键以返回常规模式:
使用以下命令,则屏幕不会显示任何信息,并且自动返回常规模式:
:silent !zip test.zip %:p
使用以下命令,可以批量压缩所有打开的文件:
:silent bufdo !zip test.zip %:p
实例:静默载入视图
如果希望记忆光标位置和手动折叠(Fold),以便在重新打开文件时恢复到之前的编辑状态。那么可以在vimrc配置文件中,增加以下自动命令:
set viewdir=$HOME/vimfiles/views/
autocmd BufWinLeave * mkview
autocmd BufWinEnter * silent loadview
使用system()函数静默执行命令
通过调用system()函数,也可静默执行命令:
:call system('espeak "hello world" &')
函数system()
和!
命令都可以调用外部命令,但system()函数不会切到shell终端,而是仍停留在vim界面。所调用外部命令的输出将会被system()函数捕获,可以将其保存在VimL变量中以供后续使用。
使用以下命令,可以查看更多帮助信息:
:help :silent
:help system()
关于本文中使用的第三方工具,请参阅以下网址:
Recommend
-
70
-
44
远程推送时 , 应用可能处于下列三种状态: (1) . 应用开启时 , 应用在前台 (2) . 应用开启时 , 应用在后台 (3) . 应用未启动(应用被杀死)...
-
7
时序数据库Influx-IOx源码学习四(Run命令的执行) - 刘涛华的个人空间 - OSCHINA - 中文开源技术交流社区 ...
-
6
Linux学习笔记 3 Vim必背命令 Published at: 2013-11-20 | Reading: 193 words ~1min | PV/UV: 5/5
-
9
星期一, 十一月 02, 2020 VIM学习笔记 全局命令(Global Command) :global全局命令,通常简写为:g,可以...
-
9
【笔记】msf向Windows远程执行DOS命令 2022-05-13 1...
-
4
FastJson远程命令执行漏洞学习笔记 Fastjson简介 fastjson用于将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。fastjson.jar是阿里开发的一款专门用于Java开发的包,可以方便的实现json对象与JavaBean对象的转换,实现Java...
-
20
【笔记】Java中执行Shell命令 2022-10-25 1...
-
11
【笔记】Go 语言执行 Shell 命令 捕捉一只爱折腾的绯鞠 ...
-
6
【笔记】SSH 远程执行命令 捕捉一只爱折腾的绯鞠 出山 - 花粥 & 王胜娚 在夜半三更过...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK