Vim入门必知:Vim使用&操作
一、Vim启动与退出
1、Vim启动
在终端更改目录后,使用vim+文件名,即可用vim打开文件。如 vim read.txt
2、退出与文件保存
在Normal命令模式下,按键盘:键进入末行模式,表示要输入vim命令;可输入的命令如下:
:q 退出(更确切的说应该是关闭当前文件)
:w 文件名 保存。如果还是保存为当前文件,不必写文件名
:wq 保存并退出(退出后自动进入Normal命令模式)
:q! 强制退出不保存
:wq! 强制保存并退出。 保存时遇到E45 readonly option is set (add!to override)可用。
二、光标的移动
光标的移动,在编辑模式下可按键盘的方向键,任意移动。下面所讲的光标移动,是在命令模式中。原始的vi只能在命令模式中移动光标,在insert输入模式只做文字的输入,而不做光标的移动。当然vim及elvis的方向键是不论在哪一种模式皆可移动。
1、基本移动
h 左,或 Backspace 或方向键
j 下,或 Enter 或 +(要 Shift 键),或方向键
k 上,或 方向键或 –(不必 Shift 键)
l 右,或 Space 或方向键
Ctrl+f 上翻一页,即 PageDown 翻页。
Crtl+b 下翻一页,即 PageUp 翻页。
Ctrl+d下滚半页。
Ctrl+u上滚半页。
2、高级移动
0 是数目字 0 而不是英文字母 o。或是 Hmoe 键,移至行首,
(含空格符)。
^ 移至第一个非空格符,注意,要 Shift 键。
$ 移至行尾,或 End 键。要 Shift 键。
· 以上两个按键是源自规则表示式(regular expression),在regexp中^是匹配行首,$是匹配行尾。
G 移至档尾(最后一行的第一个非空格符处)
gg 移至档首(第一行之第一个非空格符处)
· gg 是vim的扩充功能,在elvis或原始vi中可用1G来移至文件首(是数字1不是英文字l)。
· G 之原意是goto,指移至指定数目行之行首,如不指定数目,则预设是最后一行。
w 移至次一个字(word)前缀。当然是指英文单字。
W 同上,但会忽略一些标点符号。
e 移至前一个字字尾。
E 同上,但会忽略一些标点符号。
b 移至前一个字前缀。
B 同上,但会忽略一些标点符号。
H 移至屏幕顶第一个非空格符。
M 移至屏幕中间第一个非空格符。
L 移至屏幕底第一个非空格符。
· 这和 PageDown,PageUp不一样,内文内容并未动,只是光标在动而已。
n| 移至第 n 个字符(栏)处。注意,要用 Shift 键。n 是从头起
算的。
:n 移至第 n 行行首。或 nG。
3、特殊移动
) 移至下一个句子(sentence)首。
( 移至上一个句子(sentence)首。
} 移至下一个段落(paragraph)首。
{ 移至上一个段落(paragraph)首。
· sentence 是以. ! ?为区格。
· paragraph 是以空白行为区格。
% 这是匹配 {},[],() 用的,例如您的光标现在在 { 上
只要按 %,就会跑到相匹配的 } 上。写程序时蛮好用的。
三、基本编辑操作
下面的指令用在命令模式,即刚进入vim时的模式,只能下指令,不能键入文字。通过下面的指令,可完成相应的功能。
1、进入输入模式
i 在光标所在字符前开始输入文字(insert)。
a 在光标所在字符后开始输入文字(append)。
o 在光标所在行下开一新行来输入文字(open)。
I 在行首开始输入文字。
A 在行尾开始输入文字。
· 这个好用,您不必管光标在此行的什么地方,只要按A就会在行尾等着你输入文字。
O 在光标所在行上开一新行来输入文字。
J 将下一行整行接至本行(Joint)。
· 并无相对的split功能,可在i-mode下按Enter来达成,当然如果您熟macro的话,可自行定义。
· 使用J时,预设会消去本行的EOL,且上下行接缝间会留下一个空格符,这符合英文习惯,却对中文会造成困扰,欲不留空格符,可使用gJ(大写J)指令,但这是vim的扩充功能,elvis不适用。
2、删除
此处的删除,是在命令模式下,将光标移至要删的字符处,按键完成删除。
x 删除光标所在处之字符。在 vim 及 elvis 亦可用 Del 键。
X 删除光标前之字符。不可使用 Backspace 键。
· vim 可以正确使用以上两个指令于中文,会删去一个中文字。elvis则不行,一个中文字要删两次,即使用 xx。
dd 删除一整行(delete line)。
dw 删除一个字(delete word)。不能适用于中文。
dG 删至档尾。
d1G 删至档首。或 dgg(只能用于 vim)。
D 删至行尾,或 d$(含光标所在处字符)。
d0 删至行首,或 d^(不含光标所在处字符)。
3、取代和还原
r 取代光标所在处之字符。vi(m) 很有个性的,您在 c-mode 按
了 r 她就会停在那里等主人键入所要替代的字符,希望您这
个当主人的,不要傻呼呼的也楞在那里,赶快键入您的新字符
吧!:-)
· vim 中可用于中文字,也就是可以替换一个中文字,elvis则不行。当然您的vim是要设在taiwan的才行。怎么样!有没有看过如此有个性的取代方式?ㄚ!r就是replace啦!
R 取代字符至按 Esc 为止。
cc 取代整行内容。或大写 S 亦可。
cw 替换一个英文字(word),中文不适用。(change)
~ 游标所在处之大小写互换。当然不能用于中文。别忘了 Shift!
C 取代至行尾,即光标所在处以后的字都会被替换。或 c$。
c0 取代至行首,或 c^。
s 替换一个字符为您所输入的字符串。和 R 不同,R 是覆盖式的取
代,s 则是插入式的取代,您可亲自实验看看。ㄟ!是小写的
s。
u 这个太重要了,就是 undo,传统的 vi 仅支持一次 undo,vim
及 elvis 就不只了,vim 是没有限制的。
U 在光标没离开本行之前,回复所有编辑动作。
Crtl+r 这个也是很重要,就是 redo 键。
4、加上数字
这是vi(m)一个非常强大的功能,只此一家别无分号(当然同源的ed,sed等不在此限)。就是您可以在大部份的指令前加上数目字,代表要处理几次的意思。以下用实例来说明比较清楚。
5dd 删除游标所在处(含)起算以下五行内容。妙吧!
3r 按了 3r 后,您键入一个英文字,则三个字符皆会被您所键
入的英文取代。很抱歉,这不能用于中文。
5J 将五行合并成一行。
3x 删除三个字符。抱歉,不能用于中文。
5i A 然后按 Ecs,插入五个 A。中文也可以!
2i system Esc 插入 systemsystem。中文也可以!
5G 光标移至第五行,是从档首开始起算。
5l 移至右第五个字符处,当然 j 是可以用方向键取代的。
所有移动指令(参考第二单元)都可以加上数目字来控制,中
文也通喔!elvis 当然是不能用于中文。
其它的指令和数目字结合,就留待各位去发掘吧!最重要的是请您亲自操作看看,使用vi(m)常常要动动脑筋,会有更妙的操作方式。
5、重排
>> 整行向右移一个 shiftwidth(预设是 8 个字符,可重设)。
<< 整行向左移一个 shiftwidth(预设是 8 个字符,可重设)。
· :set shiftwidth? 可得知目前的设定值。:set shiftwidth=4可马上重设为4个字符。shiftwidth可简写成sw。ㄟ,别忘了Shift键!
:ce(nter) 本行文字置中。注意是冒号命令!
:ri(ght) 本行文字靠右。
:le(ft) 本行文字靠左。
· 所谓置中、靠左右,是参考textwidth(tw)的设定。如果tw没有设定,预设是 80,就是以 80个字符为总宽度为标准来置放。当然您也可以如sw一样马上重设。
gqip 整段重排。中文会出槌!:-(
gqq 本行重排。
重排的依据也是textwidth。这里的重排是指您键入文字时没有按Enter键,就一直在keyin,这样会形成一个很长的一行(虽然屏幕上会替您做假性折行),重排后,则会在每一行最后加入EOL。gq重排功能是vim才有的功能。
四、复制(yank)
yank是拔罐的意思。这在vi(m)的思考逻辑里,就是「拔」yank起来,「放」put上去。其实复制的指令就是y。
yy 复制游标所在行整行。或大写一个 Y。
2yy 或 y2y 复制两行。ㄟ,请举一反三好不好!:-)
y^ 复制至行首,或 y0。不含光标所在处字符。
y$ 复制至行尾。含光标所在处字符。
yw 复制一个 word。
y2w 复制两个字。
yG 复制至档尾。
y1G 复制至档首。
p 小写 p 代表贴至光标后(下)。
P 大写 P 代表贴至光标前(上)。
· 整行的复制,按 p或 P时是插入式的贴在下(上)一行。非整行的复制则是贴在游标所在处之后(前)。
“ayy 将本行文字复制到 a 缓冲区
· a 可为26个英文字母中的一个,如果是小写的话,原先的内容会被清掉,如果是大写的话是append的作用,会把内容附加到原先内容之后。
· ” 是Enter键隔壁的那一个同上符号(ditto marks)。
“ap 将 a 缓冲区的内容贴上。
· 缓冲区的术语在vim称为registers,vim扩充了相当多的功能,有兴趣深入的朋友请:h registers。您用d、c、s、x、y等指令改变或删除的内容都是放在registers中的。例如:您用dd删除的一行,也是可以使用 p来贴上的。只要是在缓冲区的内容都可以使用 p来贴上,不是一定要y起来的内容才能用 p。因此您认为 p是 paste也可以,认为是 put可能较正确。
5″ayy 复制五行内容至 a 缓冲区。
5″Ayy 再复制五行附在 a 内容之后,现在 a 中有十行内容了!
· ㄟ!不要我一直用a您就认为只有a可以用喔。26个英文字母都可以的,交叉运用下,您会发觉vi(m)肚量不小。
· 问题来了!忘记谁是谁的时候怎么办?:reg(冒号命令)就会列出所有registers的代号及内容。您现在就试着按看看。咦!怎么还有数目字、特殊符号的缓冲区,原来您刚刚删除(复制)的内容就预设放在“这个缓冲区,然后依序是 0,1,2,…9。也就是说您按p不加什么的话,是取出“缓冲区的内容的。%指的是目前编辑的档案,#指的是前一次编辑的档案。还有其它的呀!因为没什么重要,就请:h registers 吧!registers有个“s”结尾,不要搞错了,而且Tab的补全键vim也支持的,也就是说您键入:h regi再按Tab键,vim就会帮您补全,按了Tab后发现不是您要的,那就继续按,总会出现您要的。:-)
· Tab 补全的功能,elvis也有,但叫出registers列表的命令则没有,您得自行记忆在您的脑袋瓜子里。而且elvis的补全能力并没vim强。
. 英文句点,没错,就是英文句点。什么意
思?重复前次的编辑动作。只要是编辑动
作(移动光标不算,冒号命令也不算)都可以按英文句点来重
复,要重复几次都可以。
五、查找替换
查找、替换的功能几乎是每个编辑器必备的功能。vi(m)中最特殊的地方是支持正则表示式(regular expression,简称regexp)的使用。简单的说regexp是一种pattern的表示法,在执行动作,如寻找或替换,就会依据这个 pattern去找,所有符合 pattern的地方就会执行您所下的动作。关于正则表达式:Vim使用&操作
1、查找
/ 在 命令模式下,按 / 就会在左下角出现一个 /,然后键
入要寻找的字符串,按个 Enter 就会开始找。
? 和 / 相同,只是 / 是向前(下)找,? 则是向后(上)找。
n 继续寻找。
N 继续寻找(反向)。
2、快速查找
* 寻找游标所在处之 word(要完全符合)。
# 同上,但 * 是向前(下)找,# 则是向后(上)找。
g* 同 * ,但部份符合即可。
g# 同 # ,但部份符合即可。
· n, N 之继续寻找键仍适用。
3、替换
:[range]s/pattern/string/[c,e,g,i]
range 指的是范围,1,7 指从第一行至第七行,1,$ 指从第一行
至最后一行,也就是整篇文章,也可以 % 代表。
· 还记得吗?%是目前编辑的文章,#是前一次编辑的文章。
pattern 就是要被替换掉的字符串,可以用 regexp 来表示。
string 将 pattern 由 string 所取代。
c confirm,每次替换前会询问。
e 不显示 error。
g globe,不询问,整行替换。
i ignore 不分大小写。
· g 大概都是要加的,否则只会替换每一行的第一个符合字符串。可以合起来用,如cgi,表示不分大小写,整行替换,替换前要询问是否替换。
[实例]:%s/Edwin/Edward/g
这样整篇文章的 Edwin 就会替换成 Edward。
4、书签
作用是:可以在文章中的某处做个记号(marks),然后跑到其它地方去编辑,在呼叫这个mark时又会回到原处。
mx x 代表 26 个小写英文字母,这样光标所在处就会被 mark。
`x 回到书签原设定位置。
· ` 是backward quote,就是Tab键上面那一个。
‘x 回到书签设定行行首。
· ‘ 是forward quote,是Enter键隔壁那一个。
5、书签扩展
小写字母 只作用于单一档案内。
大写字母 可作用于编辑中之各档案间。
数目字 可作用于前次编辑的十个档案。
· 数目字的用法比较特殊,‘0是回到前一次编辑档案中离开前的最后位置,‘1则是回到前二次编辑档案的最后位置,依此类推。您不必使用m来标示,vim会自动记忆。很玄吧!其实这是viminfo的功能,您要认真追究的话,请:h viminfo-file-marks。viminfo关掉,就没这个功能了!
· 所谓前次指的是前次启动的vim。
:marks 得知目前所有书签的列表。
六、设置Vim
●显示行号 :set number
●取消行号显示 :set nonumber
●设置显示用户模式 :set showmode
●设置文件只读 :set readonly
参阅:http://blog.csdn.net/jianzhanger/article/details/6700431
今天的文章vim 使用_vim cant open file for writing分享到此就结束了,感谢您的阅读。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/68397.html