2013-08-23 28 views
1

一些Vim的功能上的範圍內工作:Vim的多個鏈的命令,第一個使用範圍

:'<,'>TOhtml 

什麼是第一命令取範圍的語法,而後者的命令管的結果?

在對wiki的評論中,它提出了一個插件來允許範圍在所有命令上運行;但在這裏我只需要第一個參數來處理範圍。

# These are the commands I am attempting to chain 
:'<,'>TOhtml 
:w! ~/mylink 
:q! 

# The last two can chain or be one command 
:w! ~/mylink | q! 
:wq! ~/mylink 

# But these fail 
:'<,'>TOhtml | wq! ~/mylink 
:execute "'<,'>TOhtml" | "wq! ~/mylink" 
+0

我很困惑,「:help:|」具體說:「寫!」不能跟着另一個Vim命令,但我跟着它:「q!」 – xxjjnn

+1

':write!'與':write!'不一樣。見':h:_!'。 –

+0

讓我興奮的是我可以寫:'<,'> TOhtml!w! 〜/ mylink,oh well =/ – xxjjnn

回答

3

使用execute是要走的路,但你只需要引用命令:execute,沒有第二個。

也就是說,替換:

:execute "'<,'>TOhtml" | "wq! ~/mylink" 

有了這個:

:execute "'<,'>TOhtml" | wq! ~/mylink 
2

ClothSword,你是不是離譜。根據您的VIM的設置,有可能被用來把多個命令在一行三個表達式:|\|<bar>,如:

:echom "test 1" | echom "OK" 
:echom "test 2" \| echom "OK" 
:echom "test 3" <bar> echom "OK" 

的方式來測試它們中的哪一個會工作對你來說,就是運行上述三個命令,然後是:messages。在輸出中,你應該看到錯誤消息的命令不起作用:無效的exprecion,未定義的變量等...實際的錯誤消息是無關緊要的。雖然,對於沒有工作的命令,你會看到兩行輸出,類似於:

test [number] 
OK 

有幾個缺陷的需要提防使用命令鏈接時:

  1. |表現不同,以我過去把多個系統命令,例如,當上述:與:g:s:map命令一起使用時,它可能不是你所期望的,例如:read !ls | wc
  2. 必須注意::%g/foo/p|>:%s/foo/bar/|>:nmap 10\| map \ l

注:你也可以在你使用|同樣的方式使用<NL>(可以用Ctrl-VCtrl-J插入,將輸出^@)。不過,建議不要使用此用法,因爲它與鏈接外部命令更直接。

也可參見:如果你想獲得關於如何命令鏈在VIM作品,那麼我會建議你閱讀VIM的人工全貌:巴(:help :bar),並有一看cpoption的b標誌( :help cpoption)。

+0

什麼設置決定你使用什麼? – pandubear