:M,N d
:M,N m p
:M,N t p
如果VI / M还要求从第M行的第I个字符到第N行的第J个字符标记一个字符块,是否可以完成类似以上的?
@EDIT
除了要求visual block mode
的下一个答案之外,输入一个简洁的ex命令的选项怎么样?
@EDIT 2
澄清一个字符块的含义:
visual block mode
寻址的方块字符,在{{1}中按 Ctrl - v 直接调用}} normal mode
处理的连续字符的 zipzag区域,通过在visual character mode
normal mode
寻址的连续行的行区域,通过按visual line mode
中的 V 直接调用。在这种情况下,最初提出此主题时,上面已经说明了normal mode
中的方便解决方案。@SOLUTION
在ex mode
中的第M行,第I列到第N行,第J列的连续字符的选择 zipzag area ,与ex mode
完全相同:
标志:
visual character mode
删除:
:normal! MggI|vNggJ|
猛拉:
:normal! MggI|vNggJ|d
移至第X行Y列
:normal! MggI|vNggJ|y
复制到第X行Y列
:normal! MggI|vNggJ|dXggY|p
@SOLUTION 2
从:normal! MggI|vNggJ|yXggY|p
中的第M行,第I列到第N行,第J列,选择字符方块,与ex mode
完全相同:
标志:
visual block mode
删除:
:execute "normal! MggI|\<C-v>NggJ|"
猛拉:
:execute "normal! MggI|\<C-v>NggJ|d"
移至第X行Y列
:execute "normal! MggI|\<C-v>NggJ|y"
复制到第X行Y列
:execute "normal! MggI|\<C-v>NggJ|dXggY|p"
答案 0 :(得分:4)
您可以使用normal!
从前命令模式使用视觉块模式:例如,从(42,10)到(54,20)中选择一个块(行,列)并将其拉出(两者都是行必须至少包含20个字符或者应设置virtualedit=block
:
execute "normal! 42gg10|\<C-v>54gg20|y"
。这是非常简单的方法,仅在脚本中有用。
请注意,此命令至少有以下副作用:
'<
,'>
,'[
,']
,''
。@"
,@0
。v:count
和v:count1
变量。答案 1 :(得分:2)
Ctrl + V启用可视阻止模式,然后您可以使用箭头键选择块。