2011-08-08 62 views
6

快速地把一行像「==========」一樣,我正在編輯restructuredtext文件。我經常需要在一行中放置一些像「= -`〜」的字符,並且我希望行的長度與上一行相匹配。我應該如何在vim中做到這一點?我怎麼能像vim

a long long title 
================= 

謝謝!

回答

6

yyp:s/./=/g怎麼樣?

您可以將它映射到一個密鑰,例如, :map <F5> yyp:s/./=/g<CR>

+1

這不是最好的答案,請參閱下面的更好的解決方案,使用可視化模式替換粘貼的行而不是使用替換。 –

+0

準確使用替代品有什麼不好? –

+0

在這種情況下,它是矯枉過正的,它要求正則表達式應用於線上的每個字符。它也改變你當前的搜索寄存器,所以現在你將無緣無故地高亮**整個**文檔。它也不會處理行開始處的任何空白。 –

2

我會用yypver=來儘量避免搜索& shift按鈕。這當然也可以映射到一個鍵。

+0

當然[巴里布朗](http://stackoverflow.com/questions/6978462/how-can-ia-put-a-line-like-quickly-in-vim/6978638# 6978638)是正確的,我的一個單詞測試案例太簡單了。 – chelmertz

+2

對巨魔沒有意義,但是你的意思是'yypVr ='?防止未來讀者混淆。 – sa125

+0

@ sa125:實際上我沒有,但當然這是一個有效的解決方案*如果行不以'\ s +'結尾* – chelmertz

17

另外,將工作:

yypv$r= 
+13

'yypVr ='有點短,但技術相同。 –

+2

@Randy:'YpVr =':-) – sidyll

+3

@sidyll yy和Y是相同的按鍵次數:P。另外,很多人都是'nnoremap Y y $',所以Y與D和C一致 –

0

當光標放在a long long line你可以使用類似

:s/\(.*\)/\=submatch(1) . nr2char(13) . repeat('=', strlen(submatch(1)))/ 

爲了使其更容易做替代,我想然後使用地圖:

nmap __ :s/\(.*\)/\=submatch(1) . nr2char(13) . repeat('=', strlen(submatch(1)))/ 

因此,您可以在光標所在的位置下劃線與打字__

2

如果你的行開始沒有任何尾隨空白:

Hello World  

普通模式:

ŸpV[R=

得到:

Hello World 
=========== 

說明

ý - >揚克整行,像ÿý
p - >粘貼線
V - >選擇在視覺整行在線模式 r - >將所有選擇替換爲下一個字符呃
= - >替換其他

字符如果行有前導空格,如:

Hello World 

用途:

Ÿpv$r=

,並提供:

Hello World 
    =========== 

我們使用v$視覺選擇到該行的結束,而不是使用V選擇就行了一切。

如果你在結尾的空白,你可以使用_運動才能到最後一個非空白字符。