文本行的合并
Vi提供了将文本中的某些行进行合并的命令。该命令用J(大写字母)表示,其功能是把光标所在行与下面一行合并为一行。
[例33] 屏幕显示为:
#include < stdio.h > /*this is a program */ main() 输入命令J后,显示为:
# includs < stdio.h > /*this is a program */
main()
如果在J命令之前给出一个数字n,例如3,则表示把光标当前行及其后面的2行(共3行)合并为一行。
[例34] 在原来屏幕显示情况下,输入3J命令,屏幕显示为:
# include < stdio.h > /*this is a program */ main ( )
文本行的移动
在Vi中我们可以方便地将某个范围内的文本行左右移动或从一个地方移至另外一个地方。
文本行的左右移动。
文本行左右移动的命令有 >、<、>> 和 <<四个。
(1)> 命令将限定正文行(屏幕的首行)向右移动,通常是8个空格,使用格式为:>光标移动命令。移动正文行的范围由光标所在行和随后打入的光标移动命令所限定。
[例35] 屏幕显示为:
/* this is a example */
#include
void main( )
{
int i , j ;
int k ;
i = sqr ( k ) ;
j = i + 100 ;
printf ( “\n j = % d\n ” , j ) ;
return ;
}
输入>4G后,屏幕显示为:
/* this is a example */
#include
void main( )
{
int i , j ;
int k ;
i = sqr ( k ) ;
j = i + 100 ;
printf ( “\n j = % d\n ” , j ) ;
return ;
}
(2)< 命令将限定正文行向左移动。其使用方式与>命令相同,只是移动方向相反。例如,<6M,将光标当前行和屏幕显示中间行之间的各行都左移8个空格。
(3)>> 命令将光标所在行右移8个空格。如果在>>命令之前给出一个数字n,例如4,则表示光标当前行及其下面的3行(共4行)都右移8个空格。
[例36] 屏幕原显示为:
/* this is a example */
#include
void main( )
{
int i , j ;
int k ;
i = sqr ( k ) ;
j = i + 100 ;
printf ( “\n j = % d\n ” , j ) ;
return ;
}
输入4>>后,屏幕显示为:
/* this is a example */
#include
void main( )
{
int i , j ;
int k ;
j = i + 100 ;
printf ( “ \n j = % d \n ” , j ) ;
i = sqr ( k ) ;
return ;
}
(4)<< 命令将光标所在行左移8个空格。其使用与>>命令相同,只是移动方向相反。
文本行的异行移动
我们可以利用下面的步骤完成文本行从一个地方移至另外一个地方。
将光标移至待移动文本的首行;
按ndd命令。其中n为待移动的行数。此时Vi将把待移动的文本行从文件中删除,并将其放入到1号删除寄存器中;
将光标移动到目的行处;
按² 1p将待移动的文本行从删除寄存器中取出。
此时待移动的文本行就出现在目的位置处了。
上述方法虽然可以实现文本行的异行移动,但显然太烦琐。Vi还提供了另一种快捷的方法,就是在末行模式下使用命令m(Move命令)。使用方法为n m k,表示把第n行移至第k行的下方。
[例37] 屏幕显示内容为:
/* this is a example */
#include
void main( )
{
int i , j ;
int k ;
i = sqr ( k ) ;
j = i + 100 ;
printf ( “ \n j = % d \n ” , j ) ;
return ;
}
现在想使第5行移至第4行位置处,可在末行模式下输入:
:5 m 3
然后按< Enter >,屏幕显示为:
/* this is a example */
#include
void main( )
int i , j ;
{
int k;
i = sqr ( k ) ;
j = i + 100 ;
printf ( “\n j = % d \n ” , j ) ;
return ;
}
在命令m之前,还可以指定一个行号范围(起始行号与终止行号),表示要把指定范围内的文本行移到指定位置。例如:
:2,5 m 0
表示把文件中的第二行至第五行的内容移至文件头(第零行之下,这个零行使一个虚行)。
摘自《Turbolinux》