2011-08-08 36 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选择就行了一切。

如果你在结尾的空白,你可以使用_运动才能到最后一个非空白字符。