vi 的工作模?
~辑模式
插入模式
命o模式
shell 切换
选项讄
vim ?gvim 的高U特?
Vi 在初始启动后首先q入~辑模式Q这时用户可以利用一些预先定义的按键来移动光标、删除文字? 复制或粘贴文字等。这些按键均是普通的字符Q例?l 是向右移动光标,相当于向右箭头键Qk ? 向下Ud光标Q相当于向下头键。在~辑模式下,用户q可以利用一些特D按键选定文字Q然? 再进行删除、或复制{操作?
当用户在~辑模式下键?i, a, o {命令之后,可进入插入模式;键入 : 可进入命名模式? 在插入模式下Q用户随后输入的Q除 Esc 之外的Q何字W均被看成是插入到~辑~冲Z 的字W。按 Esc 之后Q从插入模式切换到编辑模式?
在命令模式,Vi 把光标挪到屏幕的最下方Qƈ在第一个字W的位置昄一?:Q冒P。这Ӟ 用户可以键入一些命令。这些命令可用来保存文g、读取文件内宏V执?Shell 命o、设|?Vi 参数、以正则表达式的方式查找字符串或替换字符串等?
要对正文内容q行修改Q首先必L光标Ud到指定位|。移动光标的最单的方式是按键盘的上、下、左?br>右箭头键。除了这U最原始的方法之外,用户q可以利?vi 提供的众多字W组合键Q在正文中移动光标,q?br>速到达指定的行或列,实现定位。例如:
k、j、h、l 功能分别{同于上、下、左、右头?br>Ctrl+b 在文件中向上Ud一(相当?PageUp 键)
Ctrl+f 在文件中向下Ud一(相当?PageDown 键)
H 光标移到屏q的最上行QHighestQ?br>nH 光标移到屏q的W?n ?br>2H 光标移到屏q的W?2 ?br>M 光标移到屏q的中间QMiddleQ?br>L 光标移到屏q的最下行QLowestQ?br>nL 光标移到屏q的倒数W?n ?br>3L 光标移到屏q的倒数W?3 ?br>w 在指定行内右Ud标,C一个字的开?br>e 在指定行内右Ud标,C个字的末?br>b 在指定行内左Ud标,到前一个字的开?br>0 数字0Q左Ud标,到本行的开?br>$ 右移光标Q到本行的末?br>^ Ud光标Q到本行的第一个非I字W?br>
光标定位于文g内指定位|后Q可以用其他字符来替换光标所指向的字W,或从当前光标位置删除一个或?br>个字W。例如:
rc ?c 替换光标所指向的当前字W?br>nrc ?c 替换光标所指向的前 n 个字W?br>5rc ?c 替换光标所指向的前 5 个字W?br>x 删除光标所指向的当前字W?br>nx 删除光标所指向的前 n 个字W?br>3x 删除光标所指向的前 3 个字W?br>dw 删除光标右侧的字
ndw 删除光标右侧?n 个字
3dw 删除光标右侧?3 个字
db 删除光标左侧的字
ndb 删除光标左侧?n 个字
5db 删除光标左侧?5 个字
dd 删除光标所在行Qƈ去除I隙
ndd 删除 n 行内容,q去除空?br>3dd 删除 3 行内容,q去除空?br>
从正文中删除的内容(如字W、字或行Qƈ没有真正丢失Q而是被剪切ƈ复制C一个内存缓冲区中。用户可
其_脓到正文中的指定位|。完成这一操作的命令是Q?br>p 写字母 pQ将~冲区的内容_脓到光标的后面
P 大写字母 PQ将~冲区的内容_脓到光标的前面
如果~冲区的内容是字W或字,直接_脓在光标的前面或后面;如果~冲区的内容为整行正文,则粘贴在当前
光标所在行的上一行或下一行?br>注意上述两个命o中字母的大小写。vi ~辑器经总一对大、小写字母(?p ?PQ来提供一对相似的功能
。通常Q小写命令在光标的后面进行操作,大写命o在光标的前面q行操作?br>有时需要复制一D|文到C|,同时保留原有位置的内宏V这U情况下Q首先应当把指定内容复制Q而不?br>剪切Q到内存~冲区。完成这一操作的命令是Q?br>yy 复制当前行到内存~冲?br>nyy 复制 n 行内容到内存~冲?br>5yy 复制 5 行内容到内存~冲?br>
和许多先q的~辑器一Pvi 提供了强大的字符串搜索功能。要查找文g中指定字或短语出现的位置Q可?br>?vi 直接q行搜烦Q而不必以手工方式q行。搜索方法是Q键入字W?/ Q后面跟以要搜烦的字W串Q然?br>按回车键。编辑程序执行正向搜索(x文g末尾方向Q,q在扑ֈ指定字符串后Q将光标停到该字W串?br>开_键入 n 命o可以l箋执行搜烦Q找一字符串下ơ出现的位置。用字符 ? 取代 / Q可以实现反?br>搜烦Q朝文g开头方向)。例如:
/str1 正向搜烦字符?str1
n l箋搜烦Q找?str1 字符串下ơ出现的位置
?str2 反向搜烦字符?str2
无论搜烦方向如何Q当到达文g末尾或开头时Q搜索工作会循环到文件的另一端ƈl箋执行?br>
在编辑文档的q程中,为消除某个错误的~辑命o造成的后果,可以用撤消命令。另外,如果用户希望在新
的光标位|重复前面执行过的编辑命令,可用重复命o?br>u 撤消前一条命令的l果
. 重复最后一条修Ҏ文的命o
#DEMO#
在编辑模式下正确定位光标之后Q可用以下命令切换到插入模式Q?br>i 在光标左侧输入正?br>a 在光标右侧输入正?br>o 在光标所在行的下一行增L?br>O 在光标所在行的上一行增L?br>I 在光标所在行的开头输入正?br>A 在光标所在行的末输入正?br>上面介绍了几U切换到插入模式的简单方法。另外还有一些命令,它们允许在进入插入模式之前首先删MD?br>正文Q从而实现正文的替换。这些命令包括:
s 用输入的正文替换光标所指向的字W?br>ns 用输入的正文替换光标右侧 n 个字W?br>cw 用输入的正文替换光标右侧的字
ncw 用输入的正文替换光标右侧?n 个字
cb 用输入的正文替换光标左侧的字
ncb 用输入的正文替换光标左侧?n 个字
cd 用输入的正文替换光标的所在行
ncd 用输入的正文替换光标下面?n ?br>c$ 用输入的正文替换从光标开始到本行末尾的所有字W?br>c0 用输入的正文替换从本行开头到光标的所有字W?br>
退出插入模式的Ҏ是,?ESC 键或l合键Ctrl+[ ?br>
#DEMO#
?vi 的命令模式下Q可以用复杂的命o。在~辑模式下键?#8220;:”Q光标就跛_屏幕最后一行,q在 那里昄冒号Q此时已q入命o模式。命令模式又U?#8220;末行模式”Q用戯入的内容均显C在屏幕的最? 一行,按回车键Qvi 执行命o?
在编辑模式下可以?ZZ 命o退?vi ~辑E序Q该命o保存Ҏ文所作的修改Q覆盖原始文件。如果只需?br>退出编辑程序,而不打算保存~辑的内容,可用下面的命令:
: q 在未作修改的情况下退?br>: q! 攑ּ所有修改,退出编辑程?br>
~辑中的每一行正文都有自q行号Q用下列命o可以Ud光标到指定行Q?br>: n 光标移到第 n ?br>命o模式下,可以规定命o操作的行可围。数值用来指定绝对行P字符“.”表示光标所在行的行P字符
W?#8220;$”表示正文最后一行的行号Q简单的表达式,例如“.+5”表示当前行往下的W?5 行。例如:
:345 光标移到第 345 ?br>:345w file 第 345 行写?file 文g
:3,5w file 第 3 行至W?5 行写?file 文g
:1,.w file 第 1 行至当前行写?file 文g
:.,$w file 当前行x后一行写?file 文g
:.,.+5w file 从当前行开始将 6 行内容写?file 文g
:1,$w file 所有内容写?file 文gQ相当于 :w file 命o
在命令模式下Q允总文g中读取正文,或将正文写入文g。例如:
:w 编辑的内容写入原始文gQ用来保存编辑的中间l果
:wq 编辑的内容写入原始文gq出编辑程序(相当?ZZ 命oQ?br>:w file 编辑的内容写入 file 文gQ保持原有文件的内容不变
:a,bw file 第 a 行至W?b 行的内容写入 file 文g
:r file d file 文g的内容,插入当前光标所在行的后?br>:e file ~辑新文?file 代替原有内容
:f file 当前文仉命名?file
:f 打印当前文g名称和状态,如文件的行数、光标所在的行号{?br>
l出一个字W串Q可以通过搜烦该字W串到达指定行。如果希望进行正向搜索,待搜烦的字W串|于两个“
/”之间Q如果希望反向搜索,则将字符串放在两?#8220;?”之间。例如:
:/str/ 正向搜烦Q将光标Ud下一个包含字W串 str 的行
:?str? 反向搜烦Q将光标Ud上一个包含字W串 str 的行
:/str/w file 正向搜烦Qƈ第一个包含字W串 str 的行写入 file 文g
:/str1/,/str2/w file 正向搜烦Qƈ包含字W串 str1 的行臛_含字W串 str2 的行?br> ?file 文g
利用 :s 命o可以实现字符串的替换。具体的用法包括Q?br>:s/str1/str2/ 用字W串 str2 替换行中首次出现的字W串 str1
:s/str1/str2/g 用字W串 str2 替换行中所有出现的字符?str1
:.,$ s/str1/str2/g 用字W串 str2 替换正文当前行到末尾所有出现的字符?str1
:1,$ s/str1/str2/g 用字W串 str2 替换正文中所有出现的字符?str1
:g/str1/s//str2/g 功能同上
从上q替换命令可以看刎ͼg 攑֜命o末尾Q表C对搜烦字符串的每次出现q行替换Q不?gQ表C只Ҏ?br>字符串的首次出现q行替换Qg 攑֜命o开_表示Ҏ文中所有包含搜索字W串的行q行替换操作?br>
在命令模式下Q同样可以删除正文中的内宏V例如:
:d 删除光标所在行
:3d 删除 3 ?br>:.,$d 删除当前行至正文的末?br>:/str1/,/str2/d 删除从字W串 str1 ?str2 的所有行
vi 在编辑某个文件时Q会另外生成一个时文Ӟq个文g的名U通常?. 开_q以 .swp l尾。vi ?br>正常退出时Q该文g被删除,若意外退出,而没有保存文件的最C改内容,则可以用恢复命令:
:recover 恢复文g
也可以在启动 vi 时利?-r 选项?br>
#DEMO#
#DEMO#
为控制不同的~辑功能Qvi 提供了很多内部选项。利?:set 命o可以讄选项。基本语法ؓQ?br>:set option 讄选项 option
常见的功能选项包括Q?br>autoindent 讄该选项Q则正文自动~进
ignorecase 讄该选项Q则忽略规则表达式中大小写字母的区别
number 讄该选项Q则昄正文行号
ruler 讄该选项Q则在屏q底部显C光标所在行、列的位|?br>tabstop 讄?Tab 键蟩q的I格数。例?:set tabstop=nQn 默认gؓ 8
mk 选项保存在当前目录的 .exrc 文g?br>
#DEMO#
在编辑正文时Q利?vi 命o模式下提供的 shell 切换命oQ无退?vi 卛_执行 Linux 命oQ十?br>方便。语法格式ؓQ?br>:! command 执行?shell 命o command 后回?vi
另外Q在~辑模式下,键入 K Q可命o vi 查找光标所在单词的手册,相当于运?man命o?/pre>#DEMO#
1.6.7 vim ?gvim 的高U特?/h3>
Vim 代表 Vi IMprovedQ如同其名称所暗示的那PVim 作ؓ标准 UNIX pȝ vi ~辑器的提高版而存在? Vim 除提供和 vi ~辑器一样强大的功能外,q提供有多恢复、命令行历史以及命o及文件名补全{? 功能?
gvim ?vi ?X Window 版本Q该版本支持鼠标选中Q一些高U光标移动功能,q且带有菜单和工h钮?
#DEMO#
]]>