Vim命令之终结篇

这一次又特意对Vim/Vi的常用命令做了一次比较全面的总结,虽然花了两三个小时,但是觉得还是值得的。
前面总结使用Vim/Vi的命令,可能有一些杂乱,这一次就进一步的小结一下,并且将之前没有总结到的,但是绝对
有用的命令补充完整,希望对自己有用,对大家有也一点小小的用处,谢谢^_^!!!(⊙o⊙)
在Linux下熟悉并掌握最少一个文本编辑器是比不可少的,因为在Linux绝大部分的配置文件是以ASCII的纯文本文件,
要对配置文件进行修改,符合一些要求,此时就得使用到文本编辑器了。
学Vim/Vi的一个重要原因在于在Linux中很多软件的编辑接口都会主动调用Vi;比如:crontab、visudo等。再说
Vim/Vi 它还是一项很好的程序开发工具,是程序编辑器,能够根据文件的扩展名或是文件内的开头信息判断文件的内容
而自动调用该程序的语法判断式,再以相应的颜色来显示程序代码与信息,比如:C/C++程序、shell script等。所以,
掌握Vim/Vi是必须的。

Vi的三种模式:命令行模式、底层模式、编辑模式。(可能不同的参考书,叫法不一样,但是其实质意思相同)
小常识:命令行模式可与底层模式及编辑模式之间相互切换,但是底层模式与编辑模式是不能相互切换滴。(以往木注意!)

在Vim/Vi 中使用的按键命令。Vi中的万能键ESC!!!

1、光标移动的命令(大部分的命令在命令行模式有效,个别的会说明注释)
a、最原始的字符方向键:(同时对应相应的四个箭头方向键)
h 向左移动一个字符
j 向下移动一个字符
k 向上移动一个字符
l 向右移动一个字符(是小写的字符l)
如果想在同一行移动多个字符或是想移动多行,可以使用组合键:n+对应的方向键<如上>即可,其中n为数字。
并且要注意,字符方向键只能在命令行模式下有效,而箭头方向键在命令行模式和编辑模式都有效。

b、有时一行一行的移动有些麻烦,下面的几个命令可以解决这个麻烦:
ctrl+f 屏幕向下移动一页(常用,类似pagedown键)
ctrl+b 屏幕向上移动一页(常用,类似pageup键)
ctrl+d 屏幕向下移动半页
ctrl+u 屏幕向上移动半页
这几个命令式在命令行模式下有效。下面几个也一样:
H 光标移动到当前屏幕最上方那一行的第一个字符
M 光标移动到当前屏幕中间那一行的第一个字符
L 光标移动到当前屏幕最下方那一行的第一个字符

c、有时也想定位稍微准确一点(都是比较常用的)
0 移动光标到该行的行首(常用,是数字0,类似home键)
$ 移动光标到改行的行尾(类似end键)
n<space> (n为数字)在光标所在位置使光标在该行向后移动n个字符
gg 移动光标到该文件的第一行
G 移动光标到该文件的最后一行(常用)
nG n为数字,使光标移动到该文件的第n行
n[Enter] n为数字,使光标向下移动n行(常用)
:n n为数字,使光标移动到该文件的第n行(底层模式有效)
 
2、查找与替换(在底层模式有效)
a、全文件查找
/word 向下寻找匹配word的字符串
?word 向上寻找匹配word的字符串
n 英文字符,若是/word,即是向下继续寻找;若是?word,即是向上继续寻找
N 英文字符,若是/word,即是向上继续寻找;若是?word,即是向下继续寻找

b、在某一范围内查找,并且将找到的字符串予以替换
:n1,n2s/word1/word2/gn1,n2为数字,在第n1到n2行之间寻找word1,并替换为word2
:1,$s/word1/word2/g在第一行到最后行之间寻找word1,并替换为word2
:1,$s/word1/word2/gc在第一行到最后行之间寻找word1,并替换为word2,在替换前要确认

3、删除、复制与粘贴(在命令行模式有效,常用)
a、删除
x,X 在光标所在行,x向后删除一个字符,X向前删除一个字符
nx n为数字,在光标所在行向后删除n个字符
dd 删除光标所在行
ndd n为数字,删除包括光标所在行在内的向下n行
d1G 删除光标所在行到第一行的所有数据
dG 删除光标所在到最后一行的所有数据
d0 删除光标所在位置字符到该行行首的所有字符
d$ 删除光标所在位置字符到改行行尾的所有字符

b、复制
yy 复制光标所在的那一行
nyy n为数字,复制包括光标在内的向下n行
y1G 复制光标所在行到第一行的所有数据
yG 复制光标所在到最后一行的所有数据
y0 复制光标所在位置字符到该行行首的所有字符
y$ 复制光标所在位置字符到该行行尾的所有字符

c、粘贴
p 小写,粘贴到光标所在行的下一行
P 大写,粘贴到光标所在行的上一行

4、Undo/Redo(常用)
u 复原前一个动作
ctrl+r 重做上一个操作
. 小数点,重复前一个操作
 
5、从命令行模式进入编辑模式,即插入模式
i 在光标所在的位置插入
I 在光标所在行的第一个非空格处开始插入(即是在该行的第一个字符处开始插入)
a 在光标所在位置的下一个字符处开始插入
A 在光标所在行的最后一个字符处开始插入
o 在光标所在行的下一行处插入新的一行
O 在光标所在行的上一行处插入新的一行(大写的O)
s 删除光标所在的那个字符,并开始插入
S 删除光标所在字符及其后的所有字符,并开始插入(大写的S)
r 可替换光标所在的那个字符一次
R 会一直替换光标后面的字符,直到ESC
 
6、从命令行模式到底层模式
:w 将编辑的数据写入磁盘文件,并不退出Vi (:w!)
q 离开Vi,不保存数据
q! 强制退出Vi
wq 保存并退出Vi(:wq!)
ZZ 若文件数据改动,保存后离开Vi;若未改动,也离开Vi
w [filename] 将编辑的数据另存为一个文件
r [filename] 将另一文件的数据读入到正在编辑的文件中,读入的位置为光标所在行的后面
:n1,n2 w [filename]将第n1行到第n2行的内容保存到另一文件中
:! command 在Vim的底层模式下执行该命令,会暂时离开vi,到终端执行command的显示结果
 
7、Vi中的块选择
上面讲到的很多命令都是以行为单位进行操作的,但是若想进行大范围的操作,就涉及到下面的以块选择为
单位的操作。以往总是想复制某一行的某一部分字符串,总是束手无策,不过下面的命令满足了我小小的欲望。
v 字符选择,会将光标移动经过的地方反白选择
V 行选择,会将光标移动经过的地方反白选择
Ctrl+v 块选择,以方形的形式选择数据

y 将反白的地方复制
p 将复制的内容粘贴在所需要的地方
d 将反白的地方删除
 
8、多文件编辑
开始用Vi的时候,只能打开一个文件,关闭,然后去打开另一文件,这时想在几个文件之间切换,会重复打开-关闭-打开
这样的操作,非常的麻烦,不过后来学习到多文件编辑的功能,问题就迎刃而解了。
vim/vi filename1,filename2... 这样就可以同时打开多个文件,然后使用下面的命令,就可以在这几个文件之间
相互的切换,进行相关的复制、粘贴等相关操作。
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出目前这个Vim打开的所有文件

9、多窗口功能(即是分割窗口)
如果想在一个已经启动的窗口中启动另一个文件,就在底层模式下输入 :sp filename ;若没有加入文件名,则会出现
同一个文件在两个窗口中,这要避免。那么,下面的命令,可以使我们能够在打开的几个窗口中相互的切换。
:sp filename 在新窗口中打开新文件
ctrl+w+j/↓ 先按下ctrl+w,放开按键,然后再按下j或向下方向键,就能够将光标切换到下面的窗口
ctrl+w+k/↑ 先按下ctrl+w,放开按键,然后再按下k或向上方向键,就能够将光标切换到上面的窗口
ctrl+w+q 结束离开该窗口
 
10、Vim环境的设置与记录
Vim的主动记录我们曾经做过的操作行为,有利于下一次的操作。这个记录文件是:~/.viminfo ,我们可以查看。不过
重要的不是这个,重要的是Vim环境的设置,因为喜欢Vim的朋友,都会将Vim打造成符合自己的口味,这样操作起来就非常的
爽快。$_$
在底层模式下输入:set all 能够看到所有的环境设置参数,但是有点多哦!下面是一些简单常用的。
:set nu/nonu 是否设置行号
:set hlsearch/nohlserach是否高亮度查找,即是反白的设置
:set autoindent/noautoindent是否自动缩进
:set backup/nobackup是否自动保存备份文件,一般nobackup
:set ruler 右下角的状态栏说明
:set showmode 左下角的状态
:set backspace设置是否用退格键删除
:set bg=dark/light设置
:syntax on/off是否依据程序语法显示不同颜色

整体的Vim的设置值一般是放置在/etc/vimrc 这个文件中,不过,我们最好不要修改这个文件;但是可以创建和修改 
~/.vimrc 这个文件。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章