2011-09-15 50 views
2

我經常使用.鍵來重複我最後的vim命令。我想知道是否有一種方法將它與使用標記執行的命令一起使用。這裏有一個簡單的例子:vim標記可以使用重複鍵嗎?

  • 馬克使用m'a
  • 向下移動幾行文本的線,例如5j
  • 縮進使用>'a線 - 縮進6線
  • .重複上面的命令在相同的6號線 - 只會影響一號線

有沒有一種辦法使用.命令時,vim可以應用前一個命令的相同標記範圍嗎?

ps。我知道6>>.一起工作,上面的例子會更容易,我只是用它作爲例子。我經常使用標記來製作更復雜/更長的命令。

回答

1

的問題是,你重複命令>'a,但因爲規則(從:help operator),>'a「應用操作光標大多留在這是操作的文本開始後」的如果光標位於起始位置以上,則光標停留在標記a處。然後,當您重複>'a時,您最終會從該行到它自身產生一個逐行移動,它只會重新縮進一行。

既然你在文本塊的起始處,影響文字的同一塊你可以再次使用'](面向行)或`](charwise)運動,其移動到的該年底文字塊受到影響。因此,您可以使用>']再次縮進同一個塊,並且由於此時光標在同一位置開始和結束,因此您可以使用.重複附加次。

但是,更簡單的選擇是使用V5j>而不是ma5j>'aV在當前位置啓動可視模式(linewise),5j向下移動5行,然後>縮進。當您重複使用.時,同樣的視覺選擇仍然適用,因此無論您向上還是向下移動,都可以獲得理想的效果。

+0

您的評論「...開始操作的文本」給了我一個線索。儘管我比使用標記更喜歡你的解決方案,但是我發現'反向+'會移動到先前操作的文本的末尾。因此,使用'backtick +] .'將在同一標記範圍內重複最後一個命令。 – bejonbee

+1

@somethingkindawierd這是非常棒的,新的我。我將把它融入到我的答案中。 – hobbs

相關問題