转载自 http://www.dabu.info/?p=801
另外两个不错的关于Vim的文章
http://blog.csdn.net/tsuliuchao/article/details/8131537
http://www.cnblogs.com/tzhangofseu/archive/2011/12/17/2290955.html
Vim/Vi 没有菜单,只有命令
Vim/Vi 工作模式介绍:
插入模式 和 命令模式 是vi的两个基本模式。
――插入模式 ,是用来编写文本内容的。
――命令模式,是用来编辑文本,如上下翻页等,复制粘贴,跳转到指定行等操作
当前编辑的顶部或者底部会显示vim处于何种模式下。如:mode:COMMAND!
进入和退出vim编辑器:
进入 vi filename(要编辑的文件名字)―――>进入了命令模式
命令模式――>输入 :wq――>退出
保存退出
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出(前面没有冒号)
:q! 不保存退出
:wq! 强行保存退出,(文件所属者科忽略文件的制度属性)
:w 保存不退出
:wqa 保存所有文件
:w new_filename 另存为指定文件
vim配置文件 所在目录~/.vimrc
1.修改配置文件时,可以不用加:
2.可将编辑模式下的命令写在里面,每个命令单独一行,这样每次启动时,会自动执行里面的命令。
~ home directory
root /root
users /home zhangsan /home/zhamgsan
命令模式――>输入i(或者ao) ――> 插入模式
i insert
还可以输入其他的字母,来进入插入模式:
___________________________________________________________________________-
插入命令
命令 作用
a 在光标后附加文本
A 在本行行末附加文本
i 在光标前插入文本
I 在本行开始插入文本
o (字母) 在光标下插入新行
O (字母) 在光标上插入新行
插入模式―――> ESc键―――>命令模式 http://www.dabu.info/?p=801
如果要保存文件,就要从插入模式切换为命令模式才行
命令模式――>: ――> 编辑模式
编辑模式―――>命令行回车结束运行――>命令模式
在编辑模式执行完命令后,会自动回到命令模式
――――――――――――――――――――――――――――――
定位命令
命令 作用
h、方向左键 左移一个字符
j、 方向下键 下移一行
k、方向上键 上移一行
l、 方向右键 右移一个字符
$ 移至行尾
0 移至行首
_______________________________________
H 移至屏幕上端
M 移至屏幕中央
L 移至屏幕下端
( (左小括号)移动到上一个句子首
) (右小括号)移动到下一个句子首
{ (左大括号)移动到上一个段落首
} (右大括号)移动到下一个段落首
快速定位,括号匹配, %
在command模式下。当文本中存在 ( ,{ ,[ ,等符号时可以通过输入 % (就是按shift键和数字5键) 来跳到括号对应的位置
[[ 光标跳转到代码块开头即{处,要求{独占一行
gD 光标跳转到局部变量定义处
'' (两个单引号)光标跳转到上次停靠处
――――――――――――――――――――――――――――
快速定位 ,行头与行尾 0 与 $
在command模式下,
命令 作用
0(数字0键) 移至行首(把光标移至当前行的起始位置,第一个非空白字符之前,简单点说就是^ 的前面)
^(尖角号) 把光标移至当前行的起始位置,也即当前行的第一个非空白字符位置
<HOME> 移动到本行第一个字符。同0健。
$(就是按shift键和数字4键) 移至行尾
n$ 移动到下面(包括光标所在行)n行的行尾。
―――――――――――――――――――――――――-
单个词组操作光标移动命令:
命令 作用
W (大写) 移动到下一个单词的首位置(如果连个单词直接有 逗号连接,则认为是一个单词)
w(小写) 将光标右移一个单词的首位置。光标停留在下一个单词的首位置(两单词有逗号相连,则认为逗号也是一个单词),注意:如果已到行尾,则转至下一行行首
nw 向左移动n个单词,光标停在单词的首位置
e 移动到单词末尾(把光标移至当前所在单词(或下一个单词)的最后一个字符位置)
ne 和nw类似,只不过光标停留在单词的尾部
E 和小写用法一样,只是以空格字符作为字的分隔符。
nE
b 移动到单词的头部(如果光标已经在单词的头部,则将光标左移一个单词。光标停留在下一个单词的字首位置)
nb 和nw类似,只不过这是向右移动
B 将光标左移一个单词,只是以空格字符作为字的分隔符。光标停留在下一个单词的单词首位置位置(如果连个单词直接有 逗号连接,则认为是一个单词)
nB
注意:上面这些命令都使用’iskeyword‘选项中的字符来确定单词的分界,还有几个命令,只把空白字符当做”单词“的分界。当然,这里说的” 单词“已经不是传统意义上的单词了,而是由非空白字符构成一串字串。命令”W“移动光标到下个字串的开始,命令”B“移动到上个字串的开始;命令”E“移 动到下个字串的结尾,命令”gE“移动到上个字串的结尾。和上面的命令比较一下,发现什么规律没有?
――――――――――――――――――――――――――――
多个词组光标移动:
上面我们掌握了单个词组的移动,如果需要移动多个词组的光标,只需要在使用前加上要移动的词组的个数即可。一个英文字母的宽度是1,两个字母的宽度等于一个汉字的宽度。
举例如下:
Example : ABC DEF GHI JKL MNO PQR STUVW
假设光标现在处于Example的E处。并且vim处于command模式。那么我们先按 数字3键 ,再按w键。光标就会跳到JKL的J处。
――――――――――――――――――――――――-
vim重复输入文本:
举例:我们要输入gogogo。
方法如下:
vim在COMMAND模式下,先按数字3键,然后按 i键,在输入go,再按Esc键。就可以输入gogogo了。
还有,如将数字加在命令前,标示该命令处理几次,如5dd标示执行5次dd(删除光标所在整行)操作。
. (英文句号)为命令重复命令,按下一次执行一次上一次执行过的命令。
――――――――――――――――――――――――――――
快速定位,行头与行尾 0 与 $
在command模式下,
命令 作用
$(就是按shift键和数字4键) 移至行尾
0(数字0键) 移至行首(把光标移至当前行的起始位置,第一个非空白字符之前,简单点说就是^ 的前面)
^(尖角号) 把光标移至当前行的起始位置,也即当前行的第一个非空白字符位置
――――――――――――――――――――――――――――――――
快速行定位,跳到指定的行, g 与 G
命令 作用
:set nu 设置行号
:set nonu 去想行号
:set nu! 取消显示行号
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行
Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏
Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏
―――――――――――――――――――――――――-
快速定位,字母查找 f 与 F:
在command模式下,通过按 f 或者 F 快速定位内容。(不需要输入冒号)
命令 作用
f 想后查找
F 向前查找
可以结合数字来进行多次查找,如按下 3fq ,就会放下查找第三个q
如果不加数字,如 fq ,就会向后查找第一个q
――――――――――――――――――--――――――
查找光标下的相同词组, * 与 #
通过 * ,可以往后查找光标停留位置相同的词组。 # 是向前超找
举例:假设光标停留在第一个if处
if we are god if you are human
我们在command模式下,输入 * ,光标就会跳到“if you are human”的那个if上去
――――――――――――――――――――――――――――――――――――――――――――――――――――――
字符替换
命令模式下
r (小写)替换光标所在处一个字符,如ra,就是将当前光标所在处字符替换为a
R (大写)开始替换,直到按ESC键退出替换,相当于按下键盘上到insert键
cc (小写)取代光标所在整行
S (大写)与ss(小写)效果相同
C (大写)取代到行尾,包括光标处字符
c0 (小写,数字0)取代到行首,不包括光标处字符
c^ (小写)与c0(小写,数字0)效果相同
___字符串\单词搜索和替换命令______________________________________
#命令模式下
命令 作用
/string 向前搜索指定字符串
?string 从光标处开始向上开始查找字符从string
vim中有一些特殊字符在查找时需要转义 .*[]^%/?~$
set ic 查找时,忽略大小写
set noic 查找时,不忽略大小写
:nohlsearch 关闭当前的高亮显示,如果再次搜索或者按下n或N键,则会再次高亮。
:set incsearch 逐步搜索模式,对当前键入的字符进行搜索而不必等待键入完成。
:set wrapscan 重新搜索,在搜索到文件头或尾时,返回继续搜索,默认开启。
n 查找模式下,搜索指定字符串的下一个出现位置
N 查找模式下,往上找指定字符串出现的位置
s/old/new/ 用old替换new,替换当前行的第一个匹配
s/old/new/g 用old替换new,替换当前行的所有匹配
:%s/old/new/ 用old替换new,替换所有行的第一个匹配
:%s/old/new/g 全文替换指定字符串
:n1 ,n2s/old/new/g 在一定范围内替换指定字符串
若将g改为c,就会询问是否替换。在替换文本old或new中有特殊字符,如“/”等,都需要用\进行转义
ddp 交换光标所在行和其下紧邻的一行(按的速度要快,否则就成了删除)
* 向下完整匹配 光标所在处 的单词
# 向上完整匹配 光标所在处 的单词
g* 向下部分匹配 光标所在处 的单词
g# 向上部分匹配 光标所在处 的单词
命令 作用
r 取代光标所在处字符
R 从光标所在处开始替换字符,按Esc结束
R命令会将键盘所输入内容逐个覆盖光标所在处以后的字符
___________________________________________________
删除命令/剪切命令
命令 作用
x 删除光标右边的字符
nx 删除光标所在处左边n个字符
X 删除光标左边的字符
nX 删除光标左边n个文字
d 用于剪切删除文字
dl 删除当前字符, dl=x
dh 删除前一个字符
dw 删除光标之后的单词剩余部分,如果光标在单词字首位置,则删除光标右边第一个单词
dnw 删除光标之后的单词剩余部分和n个单词。如果光标在单词字首位置,则删除光标后面n个单词
db 删除到某个单词的开始位置
de 删除一个单词
dne 删除光标后面n个单词
dd 删除光标所在行,ndd删除n行
ndd 删除光标所在行向下 n 行,例如 20dd 则是删除 20 行(常用)
dj 删除上一行
dk 删除下一行
dG 删除光标所在行到文件末尾的内容
d1G 删除光标所在行到第一行的所有数据
dgg 删除当前行到文件首部的所有行(包括当前行)
jdG 删除当前行之后所有行(包括当前行)
D 删除当前字符至行尾,D=d$
d$ 与D效果相同
d0 是数字0)删除到行首,不包含光标处的字符
d^ 与d0效果相同
:n,$d 删除n行及以后所有的行
:1,$d 删除所有行
: n1,n2d 删除n1行到n2行之间的行
范例:
:6655,6665d
dl 删除字符 (缩写: "x")
diw 删除内含单词
daw 删除一个单词
diW 删除内含字串 (见 |WORD|)
daW 删除一个字串 (见 |WORD|)
dis 删除内含句子
das" 删除一个句子
dib 删除内含 '(' ')' 块
dab 删除一个 '(' ')' 块
dip 删除内含段落
dap 删除一个段落
diB 删除内含 '{ ' ' }' 大块
"daB" 删除一个 '{ ' ' }' 大块
___________复制剪切粘贴命令______________________________x
命令 作用
yy、Y 复制当前行
nyy,nY 复制当前行一下n行(包括当前行)
p、P 粘贴在当前光标所在行下或行上
ddp 交换当前行和其下一行
dd 剪切当前行
ndd 剪切当前行一下n行(包括当前行)
:1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。
:1, 10 m 20 将第1-10行移动到第20行之后。