我不確定是否有更好的方法。但是,也有少數方式,你能做到這一點(我能想到反正)的...
你的視覺阻斷溶液
就像你說的:按Ctl-V
選擇您需要的行,按I
插入,然後輸入空格數。
搜索
以上,但更靈活一點相似 - 你可以使用帶有「選擇項」 vip
命令,或任何範圍真正做到:按v
或vip
或者你有什麼選擇範圍和類型:s/^/{n spaces}
其中,{n空格}是要插入的空格的數量。
它稍微冗長些,但對於幾乎任何範圍都很好。哎呀,如果你想做整個文件,你可以做Ctl-A
或你有什麼(取決於操作系統)並縮進整個文件(或者只是跳過整個視覺模式的事情,只是做它的命令模式... ...在:1,$s/^/{n spaces}
請注意,您不必包括以s ///因爲你沒有在最後把任何標籤的第三個斜槓。
全球
也許你想只縮進該行匹配一些圖案。說...包含foo的所有行。沒問題:類型:g/foo/s/^/{n spaces}
如果其多線部分具有相似的圖案,Global特別方便。您可以跳入正常模式的土地,然後選擇相應的線和縮進::g/foo/norm Vjj:s/^/{n spaces}Ctl-V{Enter}
。最後一點額外的Ctl-V{Enter}
稍微複雜一些,但在某些情況下很有用。
使用的製表位和shiftwidth的
是的,如果你做了很多 - 我願意做:set ts=2
和:set et
和:set sw=2
和使用>>
和<<
所有可能的方法...
做一個功能
好的,仍然不夠簡短,無論出於何種原因,您需要做很多事情,您不能忍受sw
,et
和ts
設置。沒問題,只寫了一個快速的功能,並給它一個localleader
映射:
function! AddSpace(num) range
let s:counter = 0
let s:spaces = ''
while s:counter < a:num
let s:spaces .= ' '
let s:counter = s:counter + 1
endwhile
execute a:firstline .','. a:lastline .'s/^/'. s:spaces
endfunction
:map <LocalLeader>i :call AddSpace(3)Ctl-V{enter}
也許只知道不止一種方法更多的工作要做,這是不是隻知道一個更好?畢竟,有時是最好的解決方案取決於問題:)
爲什麼要避免更改'sw'?這就是它的前景。 – Daenyth 2012-02-15 04:40:50
在視線選擇中,'{count}>'會按{count} *'shiftwidth''縮進,而在普通模式下,'{count}'用於對縮進的行進行計數。也許這就是你想要的。請注意,對於可視塊選擇也是如此,但間距插入在塊的第一列之前而不是行的開始處。 – Benoit 2012-02-15 06:23:00