天天看點

shell 執行指令_VIM學習筆記 靜默執行指令(silent)

通常在使用

!

運作外部Shell指令時,将顯示提示資訊“Press ENTER or type command to continue”,需要使用者點選Enter鍵才可以傳回正常模式。

shell 執行指令_VIM學習筆記 靜默執行指令(silent)

使用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中點選Enter鍵以傳回正常模式:

:!zathura %:r.pdf
           
shell 執行指令_VIM學習筆記 靜默執行指令(silent)

使用以下指令,将打開與目前檔案同名的PDF文檔。由于zathura視窗在前台顯示,是以無法在Vim視窗中繼續進行編輯;關閉zathura視窗之後,不需要在Vim中點選Enter鍵即可傳回正常模式:

:silent !zathura %:r.pdf
           

使用以下指令,将在背景打開與目前檔案同名的PDF文檔。由于zathura視窗在背景顯示,是以無需關閉zathura視窗,也無需點選Enter鍵,即可以在Vim視窗中繼續進行編輯:

:silent exec '!zathura '.expand("%:r").'.pdf &'
           

執行個體:靜默壓縮檔案

使用以下指令,可以使用Zip壓縮目前檔案:

:!zip test.zip %:p
           

螢幕将顯示以下資訊,并等待使用者按Enter鍵以傳回正常模式:

shell 執行指令_VIM學習筆記 靜默執行指令(silent)

使用以下指令,則螢幕不會顯示任何資訊,并且自動傳回正常模式:

: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()
           

關于本文中使用的第三方工具,請參閱以下網址:

  • eSpeak, text to speech
  • Zathura, document viewer
  • Zip, compression and file packaging/archive utility

Ver: 2.0 | YYQ<上一篇 | 目錄 | 下一篇>