很多時候,我似乎有一個項目列表,我需要在它們前面添加數字。例如:用於在vim中編號列表的宏?
Item one
Item two
Item three
這應該是:
1. Item one
2. Item two
3. Item three
在vim的,我可以在編輯模式下按I
,插入 「1」,命中逃跑。然後我轉到下一行,按.
,然後按^A
增加數字。這看起來效率很低......我如何製作一個宏,以便我可以進入下一行,並在開始時插入一個比以前更大的數字?
很多時候,我似乎有一個項目列表,我需要在它們前面添加數字。例如:用於在vim中編號列表的宏?
Item one
Item two
Item three
這應該是:
1. Item one
2. Item two
3. Item three
在vim的,我可以在編輯模式下按I
,插入 「1」,命中逃跑。然後我轉到下一行,按.
,然後按^A
增加數字。這看起來效率很低......我如何製作一個宏,以便我可以進入下一行,並在開始時插入一個比以前更大的數字?
你可以很容易地記錄一個宏來做它。
第一次插入1.
在第一行的開始處(在1.
之後有幾個空格,但你看不到它們)。
轉到第二行的開頭並使用qa
進入記錄模式。
按下列鍵序列:
i # insert mode
<ctrl-Y><ctrl-Y><ctrl-Y> # copy the first few characters from the line above
<ESC> # back to normal mode
| # go back to the start of the line
<ctrl-A> # increment the number
j # down to the next line
q # stop recording
現在,您可以播放錄音與@a
(第一次;對於隨後的時間,你可以做@@
重複最後執行的宏),它會在每行的開頭添加一個新增的數字。
選擇與視覺模式臺詞:V
,然後鍵入:
:'<,'>s/^\s*\zs/\=(line('.') - line("'<")+1).'. '
這是很容易放在一個命令:
command! -nargs=0 -range=% Number <line1>,<line2>s/^\s*\zs/\=(line('.') - <line1>+1).'. '
我喜歡這種可重複性。對於單線來說很棒。不幸的是,爲了* my *的目的,當插入數字時,我傾向於在reStructuredText中進行操作,因此基本上需要''''功能 - 但由於它的行計數方式,僅僅用'\ n \ n'替換'^'不會削減它。可惜,否則它會進入我的'.vimrc'。好的代碼,無論如何,我不知道'\ =()' - 我無法在vim幫助中找到它! – 2010-11-19 12:13:51
你可以使用任何你喜歡的函數,例如一個函數爲自己保留一個計數。在這種情況下,你可能必須玩一個封裝「循環」的命令,例如http://stackoverflow.com/questions/1809571/how-do-i-substitute-from-a-list-of-strings-in-vim/1809780#1809780。否則,請參閱':h sub-replace - \ =' – 2010-11-19 13:09:29
美麗的線()技巧 - 我還沒有找到! – egbutter 2013-02-05 00:32:16
您可以使用 '記錄' 功能。 這是一種在Vim中記錄宏的簡單方法。
見:幫助記錄
在正常模式「QA」開始記錄你在輸入「A」註冊 類型所需的命令插入數在一行的開頭,將其複製到下一行並使用CTRL-A來增加其值。 'q'結束記錄 然後'@a'重放存儲在寄存器'a'中的宏 ('@@'重複上一個宏)。
你可以做'20 @a'這樣的事情連續做20次。
重複文本修改非常方便。
根據情況,使用比正則表達式更容易或更難。
也有做這類工作的一些插件,如果你要做到這一點有時:
不能同意更多,專門用於該任務的插件比自制的宏要好得多,這是因爲創建系列是一項任務,您將不止一次地執行該任務。 – Benoit 2010-11-19 14:52:05
也許這不是一個宏觀的解決方案,但至少它很容易。
號碼添加到所有線路
它可以使用:%!nl -ba
或:%!cat -n
命令,這將增加行號的所有行。
在Windows上,您必須安裝Cygwin/MSYS/SUA。
號碼添加到選定的行
要只對選定的行添加號碼,請在視覺模式(v和遊標)選擇它們,然後在完成時 - 執行命令::%!nl
(忽略空白行)或:%!cat -n
(包括空白行)。
格式化
爲了除去多餘的空格,在視覺塊選擇它們(Ctrl鍵 + v)和除去它們(X)。
向該數字之後加一些字符(.
,:
,)
),在視覺塊選擇它們(Ctrl鍵 + v),然後附加的字符(甲,鍵入的字符,然後與完成Esc)。
要添加一些字符('.'),您可以在選定的行上使用':'<,'> normal a.'。當選擇完成之前,用'gv'重複它。 – wryrych 2016-12-05 15:38:27
在文本塊的起始位置插入一個數字,例如:
1. Item One
進入VIM正常模式下的命令如下:
qb^yW+P^<Ctrl-A>q
這意味着:
qb # start recording macro 'b'
^ # move to start of text on the line
yW # 'yank' or copy a word including the ending whitespace.
+ # move one line down to the start of the next line
P # place text ahead of the cursor
^ # move to start of text
<Ctrl-A> # increment text
q # Finish recording macro
這是什麼讓你做的是重播跨越的最後一行宏根據需要多次編號列表。
使用'3 @ a'來執行宏3次 – 2010-11-19 11:40:02
我會代替'k^yWjP^ j'。文本可能不在行的開頭,更重要的是你的宏在第十行之後不起作用。 –
2010-11-19 11:46:09
Spot on,@Luc - 我自己是怎麼做的,除了我在最後加上^以便它在完成時將光標定位在行的開頭。由於^在開始時沒有功能差異,只是感覺有點整齊。 – 2010-11-19 12:06:21