vi 技巧和诀窍:令人刮目相看的 10 个超酷命令
- 格式:doc
- 大小:80.50 KB
- 文档页数:9
vi命令的使用方法嘿,朋友们!今天咱就来聊聊那个超厉害的 vi 命令!你可别小瞧了它,vi 命令就像是一把神奇的钥匙,能打开代码世界的大门呢!当你面对那一堆堆的代码时,vi 命令就能帮你在其中游刃有余地穿梭。
比如说,你想要编辑一段代码,那就像在纸上写字一样自然。
进入vi 模式,就仿佛进入了一个只属于你的代码小天地。
你可以在这里随心所欲地添加、删除、修改那些字符。
就好像你是个指挥家,而代码就是你的乐团,你想怎么指挥就怎么指挥,是不是很酷?然后呢,它还有各种快捷操作。
比如说,你想要快速移动到行首或者行尾,嘿,vi 命令就能轻松做到!这就好比你在代码的海洋里瞬间穿梭,一下子就到达了你想去的地方。
还有啊,复制粘贴什么的,也是小菜一碟。
你能想象吗?就那么几个简单的按键组合,就能完成这些复杂的操作。
再说说查找和替换功能吧。
哇塞,这可太方便啦!就好像你在一堆杂物里找一个特定的东西,vi 命令能帮你快速找到它。
而且还能帮你把它换成你想要的样子,这多厉害呀!这就好像给代码来了个大变身。
还有哦,vi 命令的稳定性那也是杠杠的!不管你面对的是多大的代码文件,它都能稳稳地应对,绝不会给你掉链子。
这就像一个可靠的老朋友,无论何时都在你身边支持你。
你说,这么好用的 vi 命令,咱能不好好掌握它吗?要是不会用,那不就像有宝贝却不知道怎么用一样可惜嘛!所以啊,大家都赶紧学起来吧,让 vi 命令成为你代码之旅的得力助手!相信我,一旦你掌握了它,你就会发现,哇,原来写代码可以这么轻松有趣!就像打开了新世界的大门一样!别再犹豫啦,赶紧去试试吧!。
vi使用技巧Vi是一款经典的文本编辑器,常被程序员和系统管理员使用。
下面是一些Vi使用的技巧,可以提高编辑效率和操作体验。
1. 模式切换:Vi有两种模式,命令模式和插入模式。
命令模式下可以进行复制、粘贴、删除等操作,插入模式下可以输入文字。
在命令模式按下 "i" 键进入插入模式,在插入模式按下"Esc" 键返回命令模式。
2. 光标移动:使用 "h"、"j"、"k"、"l" 键(分别对应左、下、上、右)可以在命令模式下移动光标。
使用 "gg" 和 "G" 键可以分别跳到文件开头和结尾。
使用 "0" 键可以跳到行首,使用"$" 键可以跳到行尾。
3. 复制和粘贴:在命令模式下将光标移到要复制的地方,按下"yy" 键复制当前行,或者按下数字 + "yy" 键复制多行。
然后将光标移到要粘贴的位置,按下 "p" 键粘贴。
4. 删除和撤销:在命令模式下按下 "dd" 键可以删除当前行,或者按下数字 + "dd" 键删除多行。
按下 "u" 键可以撤销最后的操作。
5. 查找和替换:在命令模式下按下 "/" 键可以进行查找操作,输入要查找的关键词并按下 "Enter" 键。
按下 "n" 键可以跳转到下一个匹配项。
按下 ":%s/old/new/g" 可以替换整个文件中的 "old" 字符串为 "new" 字符串。
6. 多文件编辑:使用 "vi filename" 的方式可以打开指定的文件。
linux vi命令用法Linux vi命令用法详解在Linux操作系统中,vi是一款强大的文本编辑器,广泛用于命令行界面下对文本文件进行编辑和操作。
vi命令具有丰富的功能和灵活的操作方式,本文将逐步详解vi命令的用法,并介绍一些常用的技巧和快捷键。
一、打开vi编辑器要打开vi编辑器,只需要在命令行界面下输入以下命令:vi 文件名其中,文件名是你想要编辑的文本文件的名称。
二、进入命令模式打开文件后,你将进入vi的命令模式。
在命令模式下,你可以执行一系列的操作来编辑和操作文本。
三、移动光标在命令模式下,我们可以使用不同的命令来移动光标的位置。
常用的光标移动命令如下:- `h`:向左移动一个字符- `l`:向右移动一个字符- `j`:向下移动一行- `k`:向上移动一行- `0`:移动到行首- ``:移动到行尾- `G`:移动到文件尾- `gg`:移动到文件首- `:`:进入底行命令模式四、插入和编辑文本在命令模式下,我们可以使用一些命令来插入和编辑文本。
如下是一些常用的插入和编辑文本的命令:- `i`:在光标前插入文本- `a`:在光标后插入文本- `o`:在光标所在行下插入一行- `O`:在光标所在行上插入一行- `r`:替换光标所在位置的字符- `x`:删除光标所在位置的字符- `dd`:删除光标所在行- `yy`:复制光标所在行- `p`:粘贴复制的文本五、底行命令模式在命令模式下,你可以通过输入冒号(:)进入底行命令模式,进行更高级的编辑和操作。
以下是一些常用的底行命令:- `:w`:保存文件- `:q`:退出编辑器- `:q!`:强制退出编辑器,不保存修改- `:wq`:保存修改并退出编辑器- `:set nu`:显示行号- `:set nonu`:不显示行号- `:查找内容`:在文件中查找指定的内容- `:s/旧字符串/新字符串/g`:全局替换指定字符串六、其他常用操作除了上述命令之外,vi还有一些其他的常用操作和快捷键可以提高编辑效率。
vi使用方法Vi是一款非常强大的文本编辑器,它在Unix和Linux系统中广泛使用。
它具有强大的功能和灵活的操作方式,可以帮助用户高效地编辑文本文件。
本文将介绍Vi的基本使用方法,希望能够帮助大家更好地利用这款编辑器。
Vi编辑器有两种模式,分别是命令模式和编辑模式。
在命令模式下,用户可以执行各种命令,如移动光标、复制粘贴、查找替换等操作。
在编辑模式下,用户可以输入文本内容。
要切换模式,可以按下“i”键进入编辑模式,按下“Esc”键返回命令模式。
在命令模式下,用户可以使用各种快捷键来执行操作。
例如,要保存文件并退出Vi编辑器,可以按下“Shift + :”键,然后输入“wq”命令并按下回车键。
要放弃修改并退出Vi编辑器,可以按下“Shift + :”键,然后输入“q!”命令并按下回车键。
此外,用户还可以使用“h”、“j”、“k”、“l”键来移动光标,使用“x”、“dd”、“yy”、“p”等命令来删除、复制、粘贴文本内容。
在编辑模式下,用户可以输入文本内容。
此时,用户可以使用各种快捷键来执行编辑操作。
例如,要插入文本内容,可以按下“i”键进入插入模式,然后输入需要的文本内容。
要删除文本内容,可以按下“x”键删除光标所在位置的字符,按下“dd”命令删除整行文本。
Vi编辑器还具有强大的查找替换功能。
在命令模式下,用户可以按下“/”键进入查找模式,然后输入需要查找的内容并按下回车键。
如果需要替换文本内容,可以按下“Shift + :”键,然后输入“%s/old/new/g”命令并按下回车键,其中“old”是需要被替换的内容,“new”是替换后的内容。
除了基本的编辑操作,Vi编辑器还支持自定义配置和插件扩展。
用户可以通过编辑配置文件来修改编辑器的默认设置,也可以安装各种插件来扩展编辑器的功能。
这些功能可以帮助用户更好地适应自己的工作需求,提高工作效率。
总之,Vi是一款非常强大的文本编辑器,它具有丰富的功能和灵活的操作方式。
vi的常用命令
vi是Linux系统中一种常用的文本编辑器,它可以通过命令行界面进行操作。
对于初学者来说,掌握一些vi的常用命令是必不可少的。
下面是一些常见的vi命令:
1.打开文件:vi filename
2.保存文件:先按Esc键退出编辑模式,然后输入:wq
3.放弃修改:先按Esc键退出编辑模式,然后输入:q!
4.光标移动:
h:左移一个字符
j:下移一行
k:上移一行
l:右移一个字符
5.删除字符:
x:删除光标所在的字符
dd:删除光标所在的一整行
6.撤销上一步操作:u
7.查找字符:
/char:查找字符char(向下查找)
:查找字符char(向上查找)
n:继续查找下一个匹配项
N:继续查找上一个匹配项
8.替换字符:
:r filename:将filename文件的内容插入到当前光标所在位置 :s/old/new/g:将当前行的old替换为new
:%s/old/new/g:将整个文件中的old替换为new
以上是一些vi的常用命令,掌握了这些命令后,你可以更加方便地使用vi编辑器进行文本编辑。
VI的常见使用技巧一、简介Vi命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,很多人不喜欢VI因为它的众多的命令集,但是我们只需要掌握基本的命令然后灵活地加以运用,相信你会象我一样喜欢它的。
本文旨在更有条理有归纳性地介绍VI的一些最常用命令和一些高级的应用。
二、基本命令介绍1) 光标命令k,j,h,l——上下左右光标移动命令,虽然你可以在Linux中使用键盘右边的四个光标键,但是记住这四个命令还有非常有用的,也就是右手在键盘上放置的位置部分。
nG ——n为行数,该命令立即使光标跳到指定行。
Ctrl+G——光标所在位置的行数和列数报告。
w,b——使光标向前或向后跳过一个单词。
2) 编辑命令i,a,r——在光标的前,后,上方插入字符命令(i=insert,a=append,r=replace)。
cw,dw——改变(置换)/删除光标所在处的单词的命令(c=change,d=delete)。
x,d$,dd——删除一个字符,光标所在处到行尾的所有字符,和整行的命令。
3) 查找命令/string, ?string——从光标所在处向后/向前查找相应的字符串的命令。
4)拷贝复制命令yy,p ——拷贝一行到剪贴板/取出剪贴板中内容的命令。
三、常见问题及应用技巧1) 在一个新文件中读/etc/passwd中的内容,取出用户名部分vi file:r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd。
:%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分。
:3r /etc/passwd 这是在指定的行号后面读入文件内容。
另外一种方法删掉文件中所有的空行及以#开始的注释行#cat squid.conf.default | grep -v '^$' | grep -v '^#'2) 在打开一个文件编辑后才知道登录的用户对该文件没有写权,不能存盘。
v i常用命令全精编 Lele was written in 2021vi常用命令全-----------------------------------------------------------1)文件操作vi FileName 打开文件 FileName,并将光标置于第一行首。
vi +n FileName 打开文件 FileName,并将光标置于第 n 行首。
vi + FileName 打开文件 FileName,并将光标置于最后一行。
vi + /pattern File 打开文件 File,并将光标置于其中第一个于 pattern 匹配的字符串处。
vi FileName 在上次正用 vi 编辑 FileName 发生系统崩溃后,恢复FileName。
vi File1 … Filen 打开多个文件,依次对之进行编辑。
:%!xxd 按十六进制查看当前文件:%!xxd -r 从十六进制返回正常模式:n1,n2 co n3 将 n1 行到 n2 行之间的内容拷贝到第 n3 行下。
:n1,n2 m m3 将 n1 行到 n2 行之间的内容移至第 n3 行下。
:n1,n2 d 将 n1 行到 n2 行之间的内容删除。
:n1,n2 w filename 将 n1 行到 n2 行之间的内容保存到文件 filename 中:n1,n2 w! Command 将文件中n1行到n2行的内容作为Command的输入并执行之,若不指定 n1、n2,则将整个文件内容作为 Command 的输入。
:r! Command 将命令 Command 的输出结果放到当前行。
:nr <文件> 把<文件>插入到第n行:so <文件> 读取<文件>,再执行文件里面的命令(文件中的命令应该都是一些ex命令):l1,l2w <文件> 把第l1和第l2行之间的文本写到<文件>中去:w >> <文件> 添加到<文件>末尾. 也可以使用行号:e! 重新编辑当前文件,忽略所有的修改(、[、{、}、]、)对应显示% 显示当前(、[、{ 、}、] 、)的对应项) 显示对应的() 显示对应的[] 显示对应的{(、[、{、}、]、)内数据选择daB 删除{}及其内的内容 (在非v可视模式下)diB 删除{}中的内容ab 选择()中的内容ib 选择()中的内容( 不含() )aB 选择{}中的内容iB 选择{}中的内容( 不含{} )语法提示与自动补齐★ <C-N><C-P> 插入模式下的单词自动完成★ <C-X><C-L> 行自动完成(超级有用)设置ctags#ctags -f /usr/share/vim/vim63/ -R /opt/j2sdk/src /usr/src/kernels/2.6.9^p 自动补齐上下文已有相近项^n 自动补齐~/.tags中的相近函数^[ 显示~/.tags中的光标下的函数的原型,按^t退出函数:pta 函数名预览窗口快速打开相应函数所在文件,并将光标定位在对应函数的开头K 显示光标下的C函数的man说明手册变量定位gd 转到光标下局部变量的定义处Gd 转到光标下全局变量的定义处编译选项:cn 命令会把你带到下一个出错地点,而不考虑它在什么文件里。
1.Ctrl +f 屏幕向下移动一页,相当于page down2.Ctrl +b 屏幕向上移动一页,相当于page up3.0或功能键home ,移动到这一行的最前面字符处4.$或功能键end,移动到这一行的最后字符处5.G移动到这个档案的最后一行6.移动到这个档案的第一行,相当于1G7.n<enter>,n为数字,光标向下移动n行8./word,向光标之下寻找一个名称为word的字符串。
例如要在档案内搜寻lxr这个字符串,就输入/lxr即可。
9.:n1,n2s/word1/word2/g n1与n2为数字,在第n1与n2行之间寻找wrod1这个字符串,并将该字符串取代为word2!10.:1,$s/word1/word2/g 从第一行到最后一行寻找word1字符串,并将该字符串取代为word2!11.:1,$s/word1/word2/gc从第一行到最后一行寻找word1字符串,并将该字符串取代为word2!且取代前显示提示字符给用用户确认是否需要取代!12.x,X在一行字当中,x为向后删除一个字符(相当于del),X为向前删除一个字符,相当于退格键。
13.dd 删除游标所在的那一整行。
14.ndd n为数字,删除光标所在的向下n列15.yy 复制游标所在的那一行16.nyy17.p,P 为将己复制的数据在光标下一行贴上,P则为贴在游标上一行!18.u 撤消19.ctrl +r 重复上一个动作20..(小数点)重复上一个动作21.I,i i 为从目前光标所在处插入,I 为在目前所在行的第一个非空格符处开始插入。
22.a,A a为从目前光标所在的下一个字符处开始插入,A为从光标所在行的最后一个字符处开始插入。
23.r,R r只会取代光标所在的那一个字符一次;R会一直取代光标所在的字,直到按下ESC为止24.ESC 退出编辑模式,回到一般模式中。
25.:W 将编辑的数据写入硬盘档案中26.:q! 若曾修改过档案,又不想储存,使用!为强制离开不储存档案。
vi常用使用技巧金融系统事业部—徐卓兴vi可以说是在Unix操作系统中最常用的文本编辑工具了,但是因为它的命令集众多,很多人都不习惯使用它,特别是习惯了使用windows操作系统下编辑工具的人,在初次接触vi时会觉得非常的不习惯而拒绝使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势,并会逐渐喜欢使用这种方法。
本文介绍了主要介绍使用vi的一些常用技巧。
一、基本命令介绍1.光标命令k、j、h、l——上、下、左、右光标移动命令。
注意:尽量不要使用四个箭头键来移动光标,一方面是四个箭头距离字母区比较远,使用不便,另一方面是在某些终端中不支持箭头的使用。
而k、j、h、l这4个键正是右手在键盘上放置的基本位置,移动非常快捷。
Ctrl+G ——光标所在位置的行数和列数报告。
Ctrl+F ——向后翻一页。
Ctrl+B ——向前翻一页。
Ctrl+L ——刷新屏幕(乱屏时使用):n ——光标定位到第n行。
G ——光标移动到文件最后一行。
0 ——光标移动到行首。
$ ——光标移动到行尾。
2.编辑命令o ——在当前行下面新开一行。
O ——在当前行上面新开一行。
i、a ——在光标的前、后处插入字符。
cw ——改变光标所在处的单词。
dw ——删除光标所在处的单词的命令。
X ——删除一个字符。
D ——删除光标所在处到行尾的所有字符。
dd、ndd——删除整行、删除当前行开始的n行。
n<<、n>> ——从当前行开始的n行全部向左、右调整缩进格式,该命令用于调整源码的缩进格式。
3.查找命令/string、?string ——从光标所在处向后或向前查找相应的字符串的命令。
n ——移动光标到下个匹配的位置。
4.拷贝复制命令yy、p ——拷贝一行到剪贴板或取出剪贴板中内容的命令。
二、常用技巧1.设置tab键和左移(<<)、右移(>>)命令的移动位置。
在登录用户的根目录中建立一新文件.exrc,在文件中添加如下两行set tabstop=4set shiftwidth=4第一行设置tab键的移动位置为4个空格长度,第二行设置左移或右移的单位为4个空格长度。
vi 技巧和诀窍:令人刮目相看的 10 个超酷命令成为 vi 编辑专家Martin Wicks, 自由 UNIX 顾问, 711 Consultancy Limited简介:通过 vi 技巧和诀窍提高文件编辑效率,让您的朋友刮目相看。
本文介绍 10 个不太为人所知的 vi 命令,所有真正的 vi 用户都应该掌握它们。
在使用 vi 编辑器时—无论是初次使用的用户,还是有经验的用户—大多数人往往只掌握核心命令集,这些命令可以执行最常用的功能:导航或保存文件;插入、更新、删除或搜索数据;退出但不保存修改。
但是,vi 编辑器极其强大,特性和功能非常丰富。
即使在多年使用 vi 之后,您仍然可能会发现有不知道的新命令。
本文讨论的命令就属于不太为人所知的命令,但是它们可以简化您目前采用的操作方法,让您的工作方式更高效,或者让您能够完成原来不知道可以用 vi 完成的操作。
打开和关闭行号vi 编辑器的许多选项可以控制编辑会话的外观和感觉。
使用 :set 命令修改 vi 中的会话设置。
按 Escape 键进入命令模式之后,可以使用 :set all 命令显示选项和设置的列表。
可以设置的选项之一是 number,它的作用是打开和关闭行号(见清单 1)。
清单 1. 打开行号之前## Internet host table#::1 localhost127.0.0.1 localhost loghost192.168.0.6 centos5192.168.0.10 appserv192.168.0.11 webserv192.168.0.12 test192.168.0.5 solaris10 # Added byDHCP~~:set number这个命令让 vi 在当前编辑的文件中的每个记录上显示行号。
让 vi 进入命令模式之后,可以输入 :set number 并按回车来打开行号(见清单 2)。
清单 2. 打开行号之后1 #2 # Internet host table3 #4 ::1 localhost5 127.0.0.1 localhostloghost6 192.168.0.6 centos57 192.168.0.10 appserv8 192.168.0.11 webserv9 192.168.0.12 test10 192.168.0.5 solaris10 #Added by DHCP~~~:set number可以使用 :set nonumber 命令关闭行号。
文本编辑器是所有计算机系统中最常用的一种工具。
UNIX下的编辑器有ex,sed和vi等,其中,使用最为广泛的是vi,而vi命令繁多,论坛里好像这方面的总结不多,以下稍做总结,以资共享!渴望更正和补充!进入vi的命令vi filename :打开或新建文件,并将光标置于第一行首vi +n filename :打开文件,并将光标置于第n行首vi + filename :打开文件,并将光标置于最后一行首vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename :打开多个文件,依次进行编辑移动光标类命令h :光标左移一个字符l :光标右移一个字符space:光标右移一个字符Backspace:光标左移一个字符k或Ctrl+p:光标上移一行j或Ctrl+n :光标下移一行Enter :光标下移一行w或W :光标右移一个字至字首b或B :光标左移一个字至字首e或E :光标右移一个字至字尾) :光标移至句尾( :光标移至句首}:光标移至段落开头{:光标移至段落结尾nG:光标移至第n行首n+:光标下移n行n-:光标上移n行n$:光标移至第n行尾H :光标移至屏幕顶行M :光标移至屏幕中间行L :光标移至屏幕最后行0:(注意是数字零)光标移至当前行首$:光标移至当前行尾屏幕翻滚类命令Ctrl+u:向文件首翻半屏Ctrl+d:向文件尾翻半屏Ctrl+f:向文件尾翻一屏Ctrl+b;向文件首翻一屏nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
i :在光标前I :在当前行首a:光标后A:在当前行尾o:在当前行之下新开一行O:在当前行之上新开一行r:替换当前字符R:替换当前字符及其后的字符,直至按ESC键s:从当前光标位置处开始,以输入的文本替代指定数目的字符S:删除指定数目的行,并以所输入文本代替之ncw或nCW:修改指定数目的字nCC:修改指定数目的行删除命令ndw或ndW:删除光标处开始及其后的n-1个字do:删至行首d$:删至行尾ndd:删除当前行及其后n-1行x或X:删除一个字符,x删除光标后的,而X删除光标前的Ctrl+u:删除输入方式下所输入的文本搜索及替换命令/pattern:从光标开始处向文件尾搜索pattern?pattern:从光标开始处向文件首搜索patternn:在同一方向重复上一次搜索命令N:在反方向上重复上一次搜索命令:s/p1/p2/g:将当前行中所有p1均用p2替代:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代:g/p1/s//p2/g:将文件中所有p1均用p2替换选项设置all:列出所有选项设置情况term:设置终端类型ignorance:在搜索中忽略大小写list:显示制表位(Ctrl+I)和行尾标志($)number:显示行号report:显示由面向行的命令修改过的数目terse:显示简短的警告信息warn:在转到别的文件时若没保存当前文件则显示NO write信息nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始mesg:允许vi显示其他用户用write写到自己终端上的信息:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下:n1,n2 d :将n1行到n2行之间的内容删除:w :保存当前文件:e filename:打开文件filename进行编辑:x:保存当前文件并退出:q:退出vi:q!:不保存文件并退出vi:!command:执行shell命令command:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入:r!command:将命令command的输出结果放到当前行寄存器操作"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字"?p:取出寄存器?中的内容并将其放到光标位置处。
VI的常见使用技巧一、 简介Vi命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,很多人不喜欢VI因为它的众多的命令集,但是我们只需要掌握基本的命令然后灵活地加以运用,相信你会象我一样喜欢它的。
本文旨在更有条理有归纳性地介绍VI的一些最常用命令和一些高级的应用。
二、 基本命令介绍1) 光标命令k,j,h,l——上下左右光标移动命令,虽然你可以在Linux中使用键盘右边的四个光标键,但是记住这四个命令还有非常有用的,也就是右手在键盘上放置的位置部分nG ——n为行数,该命令立即使光标跳到指定行。
Ctrl+G——光标所在位置的行数和列数报告w,b——使光标向前或向后跳过一个单词2) 编辑命令i,a,r——在光标的前,后,上方插入字符命令(i=insert,a=append,r=replace)cw,dw——改变(置换)/删除光标所在处的单词的命令 (c=change,d=delete) x,d$,dd——删除一个字符,光标所在处到行尾的所有字符,和整行的命令3) 查找命令/string, ?string——从光标所在处向后/向前查找相应的字符串的命令4)拷贝复制命令yy,p ——拷贝一行到剪贴板/取出剪贴板中内容的命令三、 常见问题及应用技巧1) 在一个新文件中读/etc/passwd中的内容,取出用户名部分vi file:r /etc/passwd 在打开的文件file中光标所在处读入/etc/passwd:%s/:.*//g 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分:3r /etc/passwd 这是在指定的行号后面读入文件内容另外一种方法删掉文件中所有的空行及以#开始的注释行#cat squid.conf.default | grep -v '^$' | grep -v '^#'2) 在打开一个文件编辑后才知道登录的用户对该文件没有写权,不能存盘vi file:w /tmp/1 既然没法存盘,不想放弃所做的所有修改,先临时存到/tmp/1:20,59w /tmp/1 或者仅仅把第20到59行之间的内容存盘成文件/tmp/13) 用VI编辑一个文件,但需要删除大段大段的内容vi fileCtrl+G 把光标移到需要删除的行的处按ctrl+G显示行号,再到结尾处再按Ctrl+G.:23,1045d 假定两次行号为23和1045,则把这几间的内容全删除也可以在开始和结束两行中用ma,mb命令标记后用:'a,'bd删除.4) 在整个文件或某几行中在行首或行尾加一些字符串vi file:3,$s/^/some string /在文件的第一行至最后一行的行首前插入some string:%s/$/ some string/g 在整个文件每一行的行尾添加 some string:%s/string1/string2/g 在整个文件中替换string1成string2:3,7s/string1/string2/ 仅替换文件中的第三到七行中的string1成string2 Note: s为substitute,%表示所有行,g表示global5) 同时编辑两个文件,在两个文件中拷贝剪贴文本vi file1 file2yy 同时打开两个文件,在文件1的光标所在处拷贝所在行:n 切换到文件2 (n=next)p 在文件2的光标所在处粘贴所拷贝的行:N 切换回文件16) 替换文件中的路径:%s#/usr/bin#/bin#g 把文件中所有路径/usr/bin换成/bin或者用:%s/\/usr\/bin/\/bin/g 在'/'前用\符号指出'/'是真的单个字符'/'另:vi常用命令列表进入vi的命令vi filename :打开或新建文件,并将光标置于第一行首vi +n filename :打开文件,并将光标置于第n行首vi + filename :打开文件,并将光标置于最后一行首vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filenamevi filename....filename :打开多个文件,依次编辑移动光标类命令h :光标左移一个字符l :光标右移一个字符space:光标右移一个字符Backspace:光标左移一个字符k或Ctrl+p:光标上移一行j或Ctrl+n :光标下移一行Enter :光标下移一行w或W :光标右移一个字至字首b或B :光标左移一个字至字首e或E :光标右移一个字j至字尾) :光标移至句尾( :光标移至句首}:光标移至段落开头{:光标移至段落结尾nG:光标移至第n行首n+:光标下移n行n-:光标上移n行n$:光标移至第n行尾H :光标移至屏幕顶行M :光标移至屏幕中间行L :光标移至屏幕最后行0:(注意是数字零)光标移至当前行首$:光标移至当前行尾屏幕翻滚类命令Ctrl+u:向文件首翻半屏Ctrl+d:向文件尾翻半屏Ctrl+f:向文件尾翻一屏Ctrl+b;向文件首翻一屏nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
vi命令记忆技巧
以下是vi命令记忆技巧:
1. 将命令和操作关联记忆:可以将vi命令和操作关联起来,形成一种记忆
技巧。
例如,将“q”命令与“退出”操作关联,将“w”命令与“存盘”
操作关联,将“e”命令与“打开新文件”操作关联等。
2. 记忆模式:vi有三种模式,分别是命令模式、输入模式和末行模式。
可以将这些模式与操作相关联,以便更容易记忆。
例如,在命令模式下,可以使用箭头键进行光标移动,在输入模式下,可以使用字母键进行文本输入等。
3. 记忆快捷键:vi有许多快捷键可以帮助记忆,例如Ctrl + f用于向前翻页,Ctrl + b用于向后翻页,Ctrl + u用于向前翻半页,Ctrl + d用于向后翻半
页等。
4. 记忆光标移动:vi的光标移动可以通过一些简单的快捷键实现,例如“h”表示左移一个字符,“j”表示下移一行,“k”表示上移一行,“l”表示右移一个字符等。
5. 记忆插入操作:在vi中,可以使用“i”键进入插入模式,使用“a”键
进入附加模式,使用“A”键进入行末模式等。
6. 记忆删除操作:在vi中,可以使用“x”键删除一个字符,使用“u”键
撤销上次操作等。
通过以上技巧,可以更轻松地记忆vi命令和操作,提高使用效率。
vi常⽤命令集锦vi编辑器有3种模式:命令模式、输⼊模式、末⾏模式。
掌握这三种模式⼗分重要: 命令模式:vi启动后默认进⼊的是命令模式,从这个模式使⽤命令可以切换到另外两种模式,同时⽆论在任何模式下只要按⼀下[Esc]键都可以返回命令模式。
在命令模式中输⼊字幕“i”就可以进⼊vi的输⼊模式编辑⽂件。
输⼊模式:在这个模式中我们可以编辑、修改、输⼊等编辑⼯作,在编辑器最后⼀⾏显⽰⼀个“--INSERT--”标志着vi进⼊了输⼊模式。
当我们完成修改输⼊等操作的时候我们需要保存⽂件,这时我们需要先返回命令模式,在进⼊末⾏模式保存。
末⾏模式:在命令模式输⼊“:”即可进⼊该模式,在末⾏模式中有好多好⽤的命令。
vim整理alias vi='vim'1)⽂件的打开与关闭vi filename : 打开或新建⽂件,并将光标置于第⼀⾏⾏⾸vi +n filename : 打开⽂件,并将光标置于第n⾏⾏⾸vi + filename : 打开⽂件,并将光标置于最后⼀⾏⾏⾸vi +/pattern filename: 打开⽂件,并将光标置于第⼀个与pattern匹配的串处vi -r filename : 在上次正⽤vi编辑时发⽣系统崩溃,恢复filenamevi filename...filename :打开多个⽂件,依次进⾏编辑:e filename : 打开filename编辑,编辑完后可⽤:hide退回之前编辑的⽂件:sav filename : 将当前⽂件另存为filename:w : 保存⽂件但不退出vi:w file : 将⽂件另存为file但不退出vi:wq或ZZ或:x : 保存⽂件并退出vi:q! : 不保存⽂件,退出vi:e : 放弃所有修改,从上次保存⽂件开始再编辑(重新载⼊⽂件,包含被其它编辑器修改过的):e! : 放弃所有修改,从上次保存⽂件开始再编辑:hide : 隐藏当前编辑的⽂件,回到上⼀次编辑的⽂件(在打开多⽂件时有效):b 2 : 在当前窗⼝切换到第⼆个打开的⽂件^w^w : 多窗⼝切换2)光标控制与屏幕调整h或^h : 将光标向左移⼀个字符j或^j或^n : 将光标向下移⼀⾏k或^p : 将光标向上移⼀⾏l或空格 : 将光标向右移⼀个字符0或| : 将光标移到当前⾏的第⼀列n| : 将光标移到当前⾏的第n列^ : 将光标移到当前⾏的第⼀个⾮空字符$ : 将光标移到当前⾏的最后⼀个字符n$ : 将光标移到当前⾏下第n-1⾏的最后⼀个字符+或return : 将光标移到下⼀⾏的第⼀个字符- : 将光标移到前⼀⾏的第⼀个⾮空字符gg : 将光标移动到⽂件第⼀⾏G : 将光标移到⽂件的最后⼀⾏nG或ngg或:n : 将光标移到⽂件的第n⾏w : 将光标移到下⼀个字的开头W : 将光标移到下⼀个字的开头,忽略标点符号b : 将光标移到前⼀个字的开头B : 将光标移到前⼀个字的开头,忽略标点符号e : 将光标移到下⼀个字的结尾E : 将光标移到下⼀个字的结尾,忽略标点符号L : 将光标移到屏幕的最后⼀⾏M : 将光标移到屏幕的中间⼀⾏H : 将光标移到屏幕的第⼀⾏H : 将光标移动到屏幕的顶⾏nH : 将光标移动到屏幕顶⾏下的第n⾏M : 将光标移动到屏幕的中间L : 将光标移动到屏幕的底⾏nL : 将光标移动到屏幕底⾏上的第n⾏( : 将光标移动到句⼦的开头) : 将光标移动到句⼦的结尾{ : 将光标移动到段落的开头} : 将光标移动到段落的结尾[[ : 将光标移动到函数(段落)开始处]] : 将光标移动到函数(段落)结尾处[{ : 将光标移动到块开始处}] : 将光标移动到块结束处m(a-z) : ⽤⼀个字母来标记当前位置,如⽤mz表⽰标记z'(a-z) : 将光标移动到指定的标记,如⽤'z表⽰移动到标记z处'' : 两个单引号,将光标移动到最近标记的位置`` : 两个反引号(Tab键上⾯那个),将光标移动到光标前⼀次停留的位置^e : 将屏幕上滚⼀⾏^y : 将屏幕下滚⼀⾏^u : 将屏幕上滚半页^d : 将屏幕下滚半页^b : 将屏幕上滚⼀页^f : 将屏幕下滚⼀页^l : 重绘屏幕z-return : 将当前⾏置为屏幕的顶⾏nz-return : 将当前⾏下的第n⾏置为屏幕的顶⾏z. : 将当前⾏置为屏幕的中央nz. : 将当前⾏上的第n⾏置为屏幕的中央z- : 将当前⾏置为屏幕的底⾏nz- : 将当前⾏上的第n⾏置为屏幕的底⾏3)插⼊⽂本a : 在光标后插⼊⽂本A : 在当前⾏尾插⼊⽂本i : 在光标前插⼊⽂本I : 在当前⾏前插⼊⽂本o : 在当前⾏的下边插⼊新⾏O : 在当前⾏的上边插⼊新⾏escape(Esc) : 回到命令模式^v : 切换到visual block模式,此时通过⽅向键选中block, 再按I,然后输⼊需要插⼊的字符,可以在选中块⾏⾸插⼊字符(同理可以将I换为X删除字符).4)修改⽂本rchar : ⽤char替换当前字符(r,即replace当前光标选中字符)Rtext escape : ⽤text替换当前字符直到换下Esc键(R,即进⼊Replace模式)stext escape : ⽤text代替当前字符(s,即删除当前光标选中字符,并进⼊插⼊状态)S或cctext escape : ⽤text代替整⾏(S,即删除当前光标选中⾏,并进⼊插⼊状态)cwtext escape : 将当前字改为text(cw,即删除当前光标后⼀个字,并进⼊插⼊状态)Ctext escape : 将当前⾏余下的改为text(C,即删除当前光标后字符直到⾏尾,并进⼊插⼊状态)cG escape : 修改⾄⽂件的末尾(cG,即删除当前光标后字符直到⽂件结束,并进⼊插⼊状态)ncw或cnw : 修改指定数⽬的字 (cnw,即删除当前光标后n个字符,并进⼊插⼊状态)nC : 修改指定数⽬的⾏ (nC,即删除当前光标后字符直到⾏尾,并删除之后的n-1⾏,并进⼊插⼊状态) ccursor_cmd text escape : 从当前位置处到光标命令位置处都改为text,如假设光标停留在u第10⾏,c5G text escape,即删除第5⾏到第10⾏,并进⼊插⼊状态,输⼊text,直到escape底⾏命令:n1,n2 co n3 : 将n1⾏到n2⾏之间的内容拷贝到第n3⾏下:n1,n2 m n3 : 将n1⾏到n2⾏之间的内容移⾄到第n3⾏下:n1,n2 d : 将n1⾏到n2⾏之间的内容删除:!command : 执⾏shell命令command:n1,n2 w!command : 将⽂件中n1⾏⾄n2⾏的内容作为command的输⼊并执⾏command:w!command : 将⽂件中的内容作为command的输⼊并执⾏之:r!command : 将命令command的输出结果放到当前⾏:1,10 w outfile : 保存⽂件第1⾏到第10⾏到outfile:1,10 w >> outfile : 将⽂件第1⾏到第10⾏追加到outfile⽂件结尾:r infile : 读取infile到当前光标下⼀⾏:nr infile : 读取infile到当前光标第n⾏的下⼀⾏J : 将下⼀⾏连接到当前⾏的末尾nJ : 连接后⾯n⾏5)删除⽂本x : 删除光标处的字符,可以在x前加上需要删除的字符数⽬nx : 从当前光标处往后删除n个字符X : 删除光标前的字符,可以在X前加上需要删除的字符数⽬nX : 从当前光标处往前删除n个字符dw : 删⾄下⼀个字的开头ndw : 从当前光标处往后删除n个字dG : 删除字符直到⽂件结束dd : 删除当前⾏ndd : 从当前⾏开始往后删除n⾏db : 删除光标前⾯的字ndb : 从当前⾏开始往前删除n字:n,md : 从第n⾏开始删除到第m⾏d$ : 从光标处删除到⾏尾dcursor_command : 删除⾄光标命令处,如dG将从当产胆⾏删除⾄⽂件的末尾dh : 删除光标前⼀个字符dl : 删除光标选中的那个字符dj : 删除光标选中⾏及下⼀⾏dk : 删除光标选中⾏及上⼀⾏dH : 从屏幕顶端删除⾄光标处dM : 删除屏幕中央⾏于光标之间的内容dL : 从光标处删除⾄屏幕末尾dk : 删除光标选中⾏及上⼀⾏dH : 从屏幕顶端删除⾄光标处^h或backspace : 删除前⾯的字符(插⼊状态下)^w : 删除前⾯的字(插⼊状态下)6)查找与替换:set ic : 查找时忽略⼤⼩写(ignorecase):set noic : 查找时对⼤⼩写敏感/text : 在⽂件中向前查找texttext : 在⽂件中向后查找text* : 在⽂件中向前查找当前光标选中的字n : 在同⼀⽅向重复查找N : 在相反⽅向重复查找fchar : 在当前⾏向前查找charFchar : 在当前⾏向后查找chartchar : 在当前⾏向前查找char,并将光标定位在text的第⼀个字符Tchar : 在当前⾏向后查找char,并将光标定位在text的第⼀个字符/\cstring : 查找STRING或string,⼤⼩写不敏感/jo[ha]n : 查找john或joan/\< the : 查找the,theatre或then等the开头的单词/the\> : 查找the或breathe等the结尾的单词/\< the\> : 查找 the(空格后紧跟the)/fred\|joe : 查找fred或joe/\<\d\d\d\d\> : 查找4个字符的单词/^\n\{3} : 查找连续3个空⾏:bufdo /searchstr/ : 在所有打开⽂件中查找bufdo %s/some/someelse/g : 在所有打开⽂件中查找some并⽤someelse代替& 重复最后的:s命令:g/text/command : 在所有包含text的⾏运⾏command所表⽰的命令:v/text/command : 在所有不包含text的⾏运⾏command所表⽰的命令:g/string/d : 删除所有包含string的⾏:v/string/d : 删除所有不包含string的⾏:g/text1/s/text2/text3 : 查找包含text1的⾏,⽤text3替换text2:v/text1/s/text2/text3 : 查找不包含text1的⾏,⽤text3替换text2:%s/old/new/g : 将⽂件中所有old替换为new(⼤⼩写敏感):%s/onward/forward/gi : 将⽂件中所有onward替换为forward(忽略⼤⼩写):%s/old/new/gc : 将⽂件中所有old替换为new,替换前需确认:%s/^/hello/g : 将⽂件中所有开头替换为hello:%s/$/Harry/g : 将⽂件中所有结尾替换为Harry:%s/ *$//g : 删除所有空格:%s/Bill/Steve/g : 将当前⽂件的所有Bill替换为Steve:%s/^M//g : 删除所有Dos回车符 (^M):%s/^M/\r/g : 删除所有Dos回车符转化成标准回车符:%s#<[^>]\+>##g : 删除所有HTML标记只留下内容:%s/^.∗\n\1$/\1/ : 删除重复⾏:s/Bill/Steve/ : 将当前⾏第⼀个Bill替换为Steve:s/Bill/Steve/g : 将当前⾏所有Bill替换为Steve:m,n s/Bill/Steve/ : 在m⾏和n⾏之间,将第⼀个Bill替换为Steve:m,n s/Bill/Steve/g : 在m⾏和n⾏之间,将所有Bill替换为Steve:2,35s/old/new/g : 将第2⾏到第35⾏之间所有old替换为new:5,$s/old/new/g : 将第5⾏到⽂件结尾之间所有old替换为newCtrl+a : 将光标选中的数字加1Ctrl+x : 将光标选中的数字减1ggVGg? : 将全⽂替换为回转13位⽂,变换2次可以回到原⽂.7)复制⽂本yw : 将光标后⼀个字放⼊临时缓冲区nyw或ynw : 将光标后n个字放⼊临时缓冲区y : 将当前⾏及下⼀⾏的内容放⼊临时缓冲区(命令模式下)y : 将当前光标选中的内容放⼊临时缓冲区(选择模式下)yy : 将当前⾏的内容放⼊临时缓冲区y$ : 将当前⾏光标之后的内容放⼊临时缓冲区D : 将当前⾏光标之后的内容剪切后放⼊临时缓冲区nyy : 将n⾏的内容放⼊临时缓冲区p : 将临时缓冲区中的⽂本粘贴在当前光标所在⾏下P : 将临时缓冲区中的⽂本粘贴在当前光标所在⾏上gh : 进⼊选择模式,通过光标选择内容,选择完毕后按y将选择内容删除并放⼊缓冲区,并插⼊y,进⼊插⼊模式gH : 进⼊选择模式,通过光标选择内容,选择完毕后按y将选择内容所在⾏删除并放⼊缓冲区,并插⼊y,进⼊插⼊模式gv : 进⼊选择模式,通过光标选择内容,选择完毕后按y将选择内容并放⼊缓冲区,不删除选择内容寄存器操作"(a-z)nyy : 复制n⾏放⼊名字为圆括号内的可命名缓冲区,省略n表⽰当前⾏"(a-z)ndd : 删除n⾏放⼊名字为圆括号内的可命名缓冲区,省略n表⽰当前⾏"(a-z)p : 将名字为圆括号的可命名缓冲区的内容放⼊当前⾏后"(a-z)P : 将名字为圆括号的可命名缓冲区的内容放⼊当前⾏前8)撤消与重复u : 撤消最后⼀次修改U : 撤消当前⾏的所有修改^r : 重新执⾏最近⼀次被撤消的操作. : 重复最后⼀次操作5. : 重复最后⼀次操作5次, : 以相反的⽅向重复前⾯的f、F、t或T查找命令; : 重复前⾯的f、F、t或T查找命令"np : 取回最后第n次的删除(缓冲区中存有⼀定次数的删除内容,⼀般为9)n : 重复前⾯的/或?查找命令N : 以相反⽅向重复前⾯的/或?命令9)vim中的选项:set all : 打印所有选项:set nooption : 关闭option选项:set nu : 每⾏前打印⾏号:set nonu : 每⾏前不打印⾏号:set showmode : 显⽰是输⼊模式还是替换模式:set ic : 查找时忽略⼤⼩写(另⼀种设置见下⽂):set noic : 查找时不忽略⼤⼩写:set list : 显⽰制表符(^I)和⾏尾符号:set ts=4 : 为⽂本输⼊设置tab stops:set ws=4 : 为⽂本输⼊缩进设置4字符:set window=n : 设置⽂本窗⼝显⽰n⾏:syntax on : 打开语法⾼亮:syntax off : 关闭语法⾼亮:set syntax=erlang : 强制语法⾼亮,并按erlang语法显⽰⾼亮10)vim的状态:.= 打印当前⾏的⾏号:= 打印⽂件中的⾏数^g 显⽰⽂件名、当前的⾏号、⽂件的总⾏数和⽂件位置的百分⽐:l 使⽤字母"l"来显⽰许多的特殊字符,如制表符和换⾏符11)shell转义命令:!command : 执⾏shell的command命令,如:!ls:!! : 执⾏前⼀个shell命令:r!command : 读取command命令的输⼊并插⼊,如:r!ls会先执⾏ls,然后读⼊内容:w!command : 将当前已编辑⽂件作为command命令的标准输⼊并执⾏command命令,如:w!grep all:cd directory : 将当前⼯作⽬录更改为directory所表⽰的⽬录:pwd : 显⽰当前⼯作⽬录:so file : 在shell程序file中读⼊和执⾏命令:!pwd : 执⾏pwd命令,然后回到vi!!pwd : 执⾏pwd命令,然后插⼊其输出结果到当前⽂件,并替换光标所在⾏:sh : 将启动⼀个⼦shell,使⽤^d(ctrl+d)返回vi^d或$exit : 退出临时开启的终端并回到vi12)宏与缩写(PS:避免使⽤控制键和符号,不要使⽤字符K、V、g、q、v、*、=和功能键):map key command_seq : 定义⼀个键来运⾏command_seq,如:map e ea,⽆论什么时候都可以e移到⼀个字的末尾来追加⽂本:map : 在状态⾏显⽰所有已定义的宏:umap key : 删除该键的宏:ab string1 string2 : 定义⼀个缩写,使得当插⼊string1时,⽤string2替换string1。
vi 技巧和诀窍:令人刮目相看的10 个超酷命令Martin Wicks, 自由 UNIX 顾问, 711 Consultancy Limited简介:通过 vi 技巧和诀窍提高文件编辑效率,让您的朋友刮目相看。
本文介绍 10 个不太为人所知的 vi 命令,所有真正的 vi 用户都应该掌握它们。
在使用 vi 编辑器时—无论是初次使用的用户,还是有经验的用户—大多数人往往只掌握核心命令集,这些命令可以执行最常用的功能:导航或保存文件;插入、更新、删除或搜索数据;退出但不保存修改。
但是,vi 编辑器极其强大,特性和功能非常丰富。
即使在多年使用 vi 之后,您仍然可能会发现有不知道的新命令。
本文讨论的命令就属于不太为人所知的命令,但是它们可以简化您目前采用的操作方法,让您的工作方式更高效,或者让您能够完成原来不知道可以用 vi 完成的操作。
打开和关闭行号vi 编辑器的许多选项可以控制编辑会话的外观和感觉。
使用 :set 命令修改 vi 中的会话设置。
按 Escape 键进入命令模式之后,可以使用 :set all 命令显示选项和设置的列表。
可以设置的选项之一是 number,它的作用是打开和关闭行号(见清单 1)。
清单 1. 打开行号之前## Internet host table#::1 localhost127.0.0.1 localhost loghost192.168.0.6 centos5192.168.0.10 appserv192.168.0.11 webserv192.168.0.12 test192.168.0.5 solaris10 # Added by DHCP~~~:set number这个命令让 vi 在当前编辑的文件中的每个记录上显示行号。
让 vi 进入命令模式之后,可以输入 :set number 并按回车来打开行号(见清单 2)。
清单 2. 打开行号之后1 #2 # Internet host table3 #4 ::1 localhost5 127.0.0.1 localhost loghost6 192.168.0.6 centos57 192.168.0.10 appserv8 192.168.0.11 webserv9 192.168.0.12 test10 192.168.0.5 solaris10 # Added by DHCP~~~:set number可以使用 :set nonumber 命令关闭行号。
还可以使用这个命令和 :set number 命令的简写,即 :set nu 和 :set nonu。
如果需要快速计算要用 vi 函数处理的行数,显示行号会非常有帮助。
当行数很多,可能跨多个屏幕时,行号尤其有用。
另外,有时候您知道要处理的行范围,但是需要查明要在 vi 命令中使用的初始和结束行号。
如果希望每次进入 vi 会话时都显示行号,那么在主目录中的 .exrc 文件中添加 set number 行。
自动缩进在用某些编程语言编写代码时,缩进是样式的重要部分,可以确保代码的可读性更好。
如果需要,可以在 vi 编辑器中根据编程语言的样式设置自动缩进。
使用 autoindent 打开或关闭自动缩进(见清单 3)。
清单 3. 打开自动缩进#!/bin/ksh##for file in /etc/*doif [[ -f ${file} ]] ; thenecho "${file} is a file"~~~~~:set autoindent在此之后,如果在一行的开头输入空格或制表符,那么后续的新行将会缩进到相同的位置。
在命令模式下,输入 :set autoindent,然后按回车打开自动缩进。
通过设置 shiftwidth 确定缩进级别。
例如,:set shiftwidth=4 把每级缩进设置为四个空格(见清单 4)。
清单 4. 设置缩进级别#!/bin/ksh##for file in /etc/*doif [[ -f ${file} ]] ; thenecho "${file} is a file"elif [[ -d ${file} ]] ; thenecho "${file} is a directory"fidone~~:set shiftwidth=4在命令模式下,可以使用 >> 命令让现有的一行增加一级缩进,使用 << 命令减少一级缩进。
在这些命令前面加上一个整数,即可让多行增加或减少一级缩进。
例如,把游标放在清单 4中第 6 行的开头,进入命令模式之后,输入 5>> 就会让下面五行增加一级缩进。
清单 5显示结果。
清单 5. 缩进代码块#!/bin/ksh##for file in /etc/*doif [[ -f ${file} ]] ; thenecho "${file} is a file"elif [[ -d ${file} ]] ; thenecho "${file} is a directory"fidone~~可以使用 :set noautoindent 命令关闭自动缩进。
还可以使用这个命令和 autoindent 命令的简写,即 :set ai 和 :set noai。
还可以使用 :set ai sw=4 在一个命令中打开缩进并设置缩进级别。
如果希望每次启动 vi 会话时都启用自动缩进并把缩进级别设置为四个空格,那么在主目录中的 .exrc 文件中添加 set ai sw=4 行。
在搜索时不区分大小写如您所知,在UNIX® 中执行搜索时,模式匹配是区分大小写的。
但是,如果希望 vi 不区分大小写,那么可以使用 :set ignorecase 命令。
使用 :set noignorecase 恢复区分大小写。
还可以使用简写(:set ic 和 :set noic)。
如果希望每次进入 vi 会话时都启用不区分大小写的搜索,那么在主目录中的 .exrc 文件中添加 set ignorecase 行。
复合搜索在 vi 中,可以使用 / 命令搜索字符串,这需要以字面字符串或正则表达式的形式指定要匹配的模式。
例如,要想在文件中搜索单词echo,只需进入命令模式,输入 /echo,然后按回车。
这个命令会找到清单 6所示文件的第 3 行的第一个单词。
清单 6. 复合搜索1 #!/bin/ksh2 #3 echo "Starting"4 file=${1}56 echo ${file}78 if [[ ${file} = 1 ]] ; then9 ((file=${file}+1))10 echo "Adding one gives " \11 ${file}12 fi13 echo "Ending"14 exit~~可以使用简单的正则表达式指定寻找包含某一单词而且后面有另一个单词的行。
例如,要想寻找包含字符串 echo、后面有零个或更多字符、之后是字符串 file 的第一行,应该使用 /echo.*file。
在清单 6所示的文件中,这个命令会找到第 6 行的第一个单词。
但是,只有这两个字符串出现在同一行上,这个命令才认为是匹配的。
如果希望搜索出现在另一个模式或字符串后面的某个模式或字符串,不管这两个模式或字符串是否在同一行上,那么可以指定由分号 (;) 分隔的两个搜索命令,从而执行复合搜索。
例如,要想搜索出现在字符串 {file}+1 后面的字符串 echo,应该使用 /{file}+1/;/echo/。
在清单 6所示的文件中,这个命令会找到第 10 行的第一个单词。
复合搜索对于寻找代码中出现在另一个命令后面的某个命令尤其有用—例如,在设置某个变量之后调用函数的地方。
重放搜索模式当在文件中搜索要替换的模式时,可以让 vi 把要匹配的任何模式保存在缓冲区中;然后,在执行替换时,可以用缓冲区引用号重放它们。
方法是把模式放在 \( 和 \) 之间,这会指示 vi 把模式放在编号的缓冲区(1 到 9)中。
在执行替换时,可以用缓冲区引用号 \1 到 \9 引用这些缓冲区。
例如,假设要在清单 7所示的文件中搜索以单词Martin开头的行并对每个匹配添加前缀Mr和后缀Wicks,那么进入命令模式,输入 vi 命令 :%s/^\(Martin\)/Mr \1 Wicks/g,然后按回车。
清单 7. 重放搜索模式(之前)Martin is an IT consultant. Martin likessnowboarding and mountain biking. Martin hasworked on UNIX systems for over 15 years. Martin alsoworked for many years before that on mainframes.Martin lives in London.~~~~:%s/^\(Martin\)/Mr \1 Wicks/g下面把这个命令分解开解释一下:∙:%s—指示 vi 执行替换。
∙/—模式分隔符。
∙^\(Martin\)—寻找以字符串 Martin 开头的行并把这个字符串保存在缓冲区 1 中。
∙/—模式分隔符。
∙Mr \1 Wicks—把找到的字符串替换为字符串 Mr,加上缓冲区 1 中的内容,再加上字符串Wicks。
∙/—模式分隔符。
∙g—全局修改(即修改所有匹配的地方)。
在搜索和替换字符串中都可以使用缓冲区引用。
修改的结果见清单 8。
清单 8. 重放搜索模式(之后)Mr Martin Wicks is an IT consultant. Martin likessnowboarding and mountain biking. Martin hasworked on UNIX systems for over 15 years. Martin alsoworked for many years before that on mainframes.Mr Martin Wicks lives in London.~~~~:%s/^\(Martin\)/Mr \1 Wicks/g书签可以让 vi 在文件中的特定位置放上书签。
方法是按 Escape 键,再按 M 键,然后输入另一个表示书签引用的字母表字符。
因此,最多可以有 26 个书签,分别名为a到z。
要返回到上一书签,按 Escape 键,再按反撇号(`),然后输入书签引用字符。
例如,按 Escape 之后按 M 和 A 键,就会把当前游标位置保存在书签a中。