将视觉选择的文本移动到行尾

时间:2014-01-13 07:54:17

标签: vim

如何将视觉选择的文本移动到行尾,我应该使用哪个或哪些命令?

e.g。 /text3<CR>请注意**是选定的文字,而不是其中的一部分。

**text3** text1 text2
**text3** text1 text2

然后转到:

text1 text2 **text3**
text1 text2 **text3**

我试过了:%s/\(text3\)\(.*\)/\2 \1/其他任何方法吗?

4 个答案:

答案 0 :(得分:3)

基本上你可以这样做(在视觉上选择你的文字之后就像把光标放在你的单词上,然后点击 v i w ) KBD> d $ p 。任何你可以为它创建一个宏,我曾经在类似的情况下使用类似的东西: q q / SEARCHTERM 输入 v 瓦特 d $ p Ĵ 0 q 。现在你可以执行 NUMBER(s) @ q

但作为更通用的解决方案:

:%s_\(YOUR_TEXT_TO_MOVE_TO_THE_EOL\)\(.*\)_\2\1

应该工作得很好。

答案 1 :(得分:1)

您可以使用:global命令选择具有匹配模式的行,并:normal对这些行进行操作。例如:

:g/^text3 /norm! dt p d0$p

解释

:g/^text3 /<command> 

在以text3开头,后跟空格的所有行上运行指定的<command>。有关详细信息,请参阅:help :global

norm!

在正常模式下执行以下命令。请参阅:help :normal

dt p d0$p

删除到第一个空格,粘贴到所述空格后,向前移动一个字符并删除到该行的开头。移到行尾并粘贴。

答案 2 :(得分:1)

您可以使用Damian Conway's dragvisuals.vim

安装后,将以下(取消注释)添加到.vimrc

runtime plugin/dragvisuals.vim

vmap  <expr>  <LEFT>   DVB_Drag('left')                     
vmap  <expr>  <RIGHT>  DVB_Drag('right')                    
vmap  <expr>  <DOWN>   DVB_Drag('down')                     
vmap  <expr>  <UP>     DVB_Drag('up')                       
vmap  <expr>  D        DVB_Duplicate()                      

" Remove any introduced trailing whitespace after moving... 
let g:DVB_TrimWS = 1                                        

或者,如果您使用箭头键进行正常运动,请选择四个 块拖动的其他键。例如:

vmap  <expr>  h        DVB_Drag('left')                     
vmap  <expr>  l        DVB_Drag('right')                    
vmap  <expr>  j        DVB_Drag('down')                     
vmap  <expr>  k        DVB_Drag('up')                       

或者:

vmap  <expr>  <S-LEFT>   DVB_Drag('left')                   
vmap  <expr>  <S-RIGHT>  DVB_Drag('right')                  
vmap  <expr>  <S-DOWN>   DVB_Drag('down')                   
vmap  <expr>  <S-UP>     DVB_Drag('up')                     

甚至:

vmap  <expr>   <LEFT><LEFT>   DVB_Drag('left')              
vmap  <expr>  <RIGHT><RIGHT>  DVB_Drag('right')             
vmap  <expr>   <DOWN><DOWN>   DVB_Drag('down')              
vmap  <expr>     <UP><UP>     DVB_Drag('up')

使用

使用可视模式选择并使用h,l,j或k等移动块。

答案 3 :(得分:0)

如果文字为iw,则涉及text3的解决方案将有效,但two words会失败。

涉及$p的任何方法都不会像:s命令那样添加空格。您可以改为使用A <C-R>"<Esc>

如果你想在一行上完成它,并且已经在可视模式下选择了文本,那么x$p就非常容易了。

如果文本在您刚刚搜索过的意义上被“选中”,并且使用搜索突出显示组突出显示,并且您想要在一行上进行更改,那么您可以使用{{1 }}。 d/<C-R>//e<CR>$p将被当前搜索模式替换,因此您将获得类似<C-R>/的内容。

如果您想在缓冲区中的所有匹配行上执行此操作,那么您的解决方案会稍微简化一下

d/text3/e<CR>$p

:%s/\v(<C-R>/)(.*)/\2 \1