vim快速参考
2012-09-25 20:18 netwy 阅读(226) 评论(0) 收藏 举报vim实用手册 - 基础篇(打开、关闭、移动、搜索)
一、三种模式
vim的工作模式:
1.命令模式(Command mode) ,命令模式下所有的键就是功能键,ESC键可以进入此模式。
2.编辑模式(Insert mode) ,在命令模式下a、i、o等可以进入此模式,ESC可退出此模式。
3.命令行模式(Command line mode) 输入":"进入此模式。
深入理解这三种模式,是vim的根本。
二、启动、保存与退出
打开vim编辑文档,常用的无非是:vim filename的方式。
进入vim可以用xxxG,或者:xxx来定位。
还有两种用的到的打开方式,一种是同时打开多个文件,
如:
vim file1 file2 file3
vim file*
vim会依次打开3个文件,使用命令行::bp :bn在文件之间切换。
这种方式,我认为一个是不同文件之间复制内容时比较有用,
还有一个就是可以在shell命令行中,使用vim xxxx*一类的通配符,
同时打开一类文件进行编辑。
命令 执行的操作 记忆方法
------------------------------------------------------
:bn 下一个文件
:bp 上一个文件
还有一个分隔窗口的打开方式,当打开file1时,使用命令行:
:sp file2,便可以使用分隔窗口,打开file2,这个在比较文件,
或者几个文件之间复制内容时,是非常有用的。
命令 执行的操作 记忆方法
------------------------------------------------------
:sp file 新建分隔窗口,打开file
Ctrl+w+方向键 切换到前/下/上/后一个窗格
Ctrl+w+h/j/k/l 同上
Ctrl+ww 依次向后切换到下一个窗格中
常用的退出和保存命令无非就是w,q,!进行组合
比较有意思的是:e,有时我会查看正在更新的日志文件,
当日志文件有更新时,可以简单的使用这个命令,
将最新的文件读入到vim中。
命令 执行的操作 记忆方法
------------------------------------------------------
:q 退出 quit
:w 存盘 write
:e 打开新文件
:r 读取文件到VI read
:! 强行
------------------------------------------------------
常用的组合如下:
:wq 保存并退出
:w 只保存
:q! 退出不保存
:q
下面是一些类似茴香豆的写法的命令,仅供记忆与参考。
-----------------------------------------------------------
启动编辑器
命令 功能
vi +100 foo
打开文件foo并把光标定位在100行
vi +/pat foo
打开文件foo并把光标定位在pat第一次出现的行
vi +foo 打开文件foo,把光标定位在文件尾
vi foo1 foo2 ...
打开文件foo1,用n切换到foo2等
vi -r foo
把交换文件里的内容恢复到缓冲区里
vi -R foo
一只读模式打开foo文件
保存与退出
命令 功能
:w 保存文件并继续编辑
:w bar
同微软Windows操作系统中的“另存为……”
:w! bar
同上,但是覆盖现存的文件bar
:n1,n2w foo
把n1到n2之间的行保存到文件foo
:n1,n2w>>foo 把n1到n2之间的行添加到foo文件尾
:.w foo
把当前行保存到文件foo
:$w foo
把最后一行保存到文件foo
:x 保存并退出编辑器
:wq 同上
:q 如果文件的内容没有变化则退出编辑器
:q! 放弃修改并退出编辑器
:set nu 显示行号 number
:set nonu 隐藏行号 no number
----------------------------------------------------------
三、移动
关于移动,我觉得可能是vim最有意思的地方,因为vim设计的精髓,就是不使用
鼠标与小键盘也可以完成所有工作。
移动,多是在命令模式下完成,如果进入到编辑模式,则只有使用方向键了。
下面是我常用的一些命令与快捷键:
页面之间移动,常用的无非就是下面四个组合。
快捷键 功能 记忆方式
--------------------------------------------------------------
Ctrl + f 翻到下一页(向前翻页) front
Ctrl + b 翻到上一页(向后翻页) back
Ctrl + u 向前翻半页
Ctrl + d 向后翻半页
--------------------------------------------------------------
vim行之间移动是比较有意思的,vim使用h,j,k,l代替方向键在行之间、字之间移动,
且使用注入w,b之类的按照词移动的方式,则明显比vs快捷的多。
快捷键 功能 记忆方式
--------------------------------------------------------------
h 左
j 下一行
k 上一行
l 右
--------------------------------------------------------------
快捷键 功能 记忆方式
--------------------------------------------------------------
^ 移到行头 往上就到行头了(象形)
$ 移到行尾 写完一行就要给一行的钱
w 下一个单词 word
b 前一个单词 behind(在。。。后面)
e 下一单词尾 end
p 向前移动到单词首
0或| 移动到行首
30| 移动到第30列
H 将光标定位到屏幕第 1 行行首
M 将光标定位到屏幕中间行行首
L 将光标定位到屏幕最后 1 行行首
G 光标定位到文件的最后 1 行行首
#G 跳到某一行 大哥(G)说到哪就到哪
1G 2G 3G 将光标定位到数字所示行行首
--------------------------------------------------------------
B、E和W命令的作用与b、e和w的作用一样,只是后者忽略了标点符号。
下面细说一下,比较有用的按照行号或者文件百分比移动的情况。
快捷键 功能 记忆方式
--------------------------------------------------------------
gg 跳到文件首
1G 跳到文件首
40G 跳到第40行
G 跳到文件尾
40% 跳到文档40%的位置
--------------------------------------------------------------
有时,会需要显示行号。常用的下面两个。
快捷键 功能 记忆方式
--------------------------------------------------------------
[Ctrl+g] 显示当前行号及文件的百分比
:set nu 显示行号
:set nonu 取消现实行号
--------------------------------------------------------------
还有一个,尤其是对于编写程序比较方便的块移动的方式,多是用各种大中花括号,
尤其是%对于写乱了套的程序猿来说,还是非常有用的,
这个写程序时多自己试试:
快捷键 功能 记忆方式
--------------------------------------------------------------
) 定位到下一句开始
( 定位到当前句开始
{ 上一段
} 下一段
% 匹配括号移动,包括 (, {, [. (注:你需要把光标先移到括号上)
* 和 # :匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
v 可视化的选择
--------------------------------------------------------------
四、搜索
常用的无非是下面的5个指令。
快捷键 功能 记忆方式
--------------------------------------------------------------
/search_string 从当前行向下查找“search_string”
?search_string 从当前行向上查找“search_string”
n 继续查找下一个“search_string”
N 继续查找上一个“search_string”
/serrch_string\c 忽略大小写
vim实用手册 - 编辑篇(插入、删除、复制、替换)
一、插入文本
常用的,记住i、o、a即可,
当然大小写,一般区分前后的概念,这个是vim在设计各类指令的原则。
命令 执行的操作 记忆方法
-----------------------------------------------------------------
i 在光标的左侧插入字符
I 在行首插入字符
a 在光标的右侧添加文本
A 在行尾添加文本
o 在当前行下面插入一空行
O 在当前行上面插入一空行
20i-[Esc] 插入20个连字符(这是一个非常有用的命令,比如插入分隔符,插入+等等)
-----------------------------------------------------------------
下面还有几个常用的设置:
命令 执行的操作 记忆方法
-----------------------------------------------------------------
:set showmode 当vi处在输入模式下时显示提示信息
:set sm 即时显示配对的)或}
:set ts=n 把制表符设置为n(默认为8)
:set ai 下一行从前一行的缩进位置开始(这个在写代码时比较有用)
-----------------------------------------------------------------
二、删除文本
命令 执行的操作 记忆方法
-----------------------------------------------------------------
x 删除光标所在的字符
6x 删除光标位置的字符以及右侧的5个字符
X 删除前一个字符
dd 删除当前行
4dd 删除4行
64dd 删除64行
dw 删除一个单词
d0 删除到行首
d$ 删除到行尾
d 删除一个区域(只用于vim)
p 把被剪切的文本粘贴到下面(整行)或右侧(部分行)
P 把被剪切的文本粘贴到上面(整行)或左侧(部分行)
"add 把当前行粘贴到缓冲区a里
"ap 把缓冲区a里的内容粘贴到当前位置
J 把当前行于下一行合并为一行
xp 调换两个字符的位置
-----------------------------------------------------------------
三、替换文本
命令 执行的操作 记忆方法
-----------------------------------------------------------------
rch 把光标位置的字符替换为ch
R 替换光标右边的文本
s 把光标所在的字符替换为任意个字符
S 替换整行内容
cw 修改一个单词
c 修改区域里的文本(vim)
~ 改变所扫描的或区域里的字母的大小写
!tr'[a-z]''[A-Z]' 把区域里的字母转换为大写(vim)
!tr'[A-Z]''[a-z]' 把区域里的字母转换为小写(vim)
-----------------------------------------------------------------
四、复制、粘帖文本
命令 执行的操作 记忆方法
-----------------------------------------------------------------
yy 复制当前行
6yy 复制六行
yw 复制单词
y 复制区域(vim)
p 把复制的文本粘贴到右边或下面
P 把复制的文本粘贴到左边或上面
"ayy 把当前行复制到缓冲区a里
"ap 恢复缓冲区a里的内容
---------------------------------------------------------------
五、撤销、重做、重复命令
命令 执行的操作 记忆方法
-----------------------------------------------------------------
u 撤销
<C-r> 重做
. (小数点) 可以重复上一次的命令
N<command> → 重复某个命令N次
----------------------------------------------------------------
vim实用手册之精华篇:搜索、替换以及正则表达式
一、搜索
快捷键 功能 记忆方式
--------------------------------------------------------------
/search_string 从当前行向下查找“search_string”
?search_string 从当前行向上查找“search_string”
n 继续查找下一个“search_string”
N 继续查找上一个“search_string”
/serrch_string\c 忽略大小写
--------------------------------------------------------------
前面也简单的介绍过,命令模式下使用大小写的:r,s的替换功能,
这里也就不在赘述了。
二、范围
下面详细介绍下,命令行模式下的搜索和替换功能。
说道搜索和替换,那么不可回避的,就是”范围“的概念。
所谓范围,在命令行中,常以,分隔,比如3,7 那么表示
下面跟着的操作,只针对第三行至第七行之间的文本。
怎么看行号,前面说过:set no,显示所有行号,或者ctrl+g,现实当前
行号,这里也是回顾一下。
下面列出常用的范围描述:
命令 功能 记忆方式
--------------------------------------------------------------
:n,m 从n行至m行
:. 当前行
:$ 最后行
:'c 标记为c的行
:g/pattern/ 所有匹配pattern的行
--------------------------------------------------------------
三、替换
下面说一下替换功能,:s命令可以完成搜索以及替换功能,替换命令
通常需要限定文本范围或者跟随:g命令,下面列出常用的替换命令。
命令 功能 记忆方式
--------------------------------------------------------------
:s/p/q/g 搜索模式p,并全部替换为q
:s/p/q/ 搜索模式p,并将首次出现p替换为q
:s/p/q/c 搜索模式p,并确认是否替换为q
:s/p/q/g 将当前行所有p用q代替
:n,ms/p/q/g 将n行至m行之间的内容p用q代替
:g/p/s//q/g 将文件中所有p用q代替
--------------------------------------------------------------
四、crlf的来历
下面说一个有趣的小知识,关于回车换行符的。
DOS, Mac 和Unix格式的文件各有不同,
回想计算机的史前史,那时的打字机使用两个字符来开始一个新行。
首先是一个字符命令使打印头移回开始位置(回车,<CR>),然后另一个字
符命令控制向前进纸一行(进纸,<LF>).
在计算机诞生之初,存储设备十分昂贵。于是有人就提出没有必要
用两个字符来表示一行的结束。UNIX一族决定只用进纸一个字符<Line
Feed>来表示行尾。来自苹果阵营的人则把回车<CR>作为换行的标
准。MS-DOS(和微软的Windows)仍然决定沿用古老的回车换行<CR><LF>传
统。
这样就导致了,三种不同的古怪标准,写vb程序,常用到的一个vbcrlf常量,
就是这么来的。
dos unix mac
------------------------------------------------------------
<CR><LF> <LF> <CR>
------------------------------------------------------------
所以,如果把dos下编辑的文本拿到unix下用vim打开,就会在每一行的行尾,
出现一个^M的标记,当然,可以用tr命令行,或者dos2unix命令直接转换,
但是应用上面说到的vim搜索和替换命令,也可以做到。
-----------------------------------------------------------
五、自动提示
在 Insert 模式下,你可以输入一个词的开头,然后按
<C-p>或是<C-n>,自动补齐功能就出现了
-----------------------------------------------
六、块操作<C-v>
块操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]
^ → 到行头<C-v> → 开始块操作<C-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)I-- [ESC] → I是插入,插入“--”,按ESC键来为每一行生效。
一但被选好了,你可以做下面的事:
J → 把所有的行连接起来(变成一行)< 或 > → 左右缩进= → 自动给缩进 (陈皓注:这个功能相当强大,我太喜欢了)
-----------------------------------------------------------
七、正则表达式
正则表达式,伟光正的描述,是一种用来描述文本模式的特殊语法。
土点的说法,就是一种牛逼立体的匹配字符串的语法,
也可以用来区分普通程序员和文艺程序员。
曾经专门买了一本专门讨论这个主题的书来看,结果是头昏脑胀。
用了一段时间,发现其实,真是很简单的东西,
只要记住下面的这些内容,就会玩转正则表达式,当然,
熟能生巧是必须的。
这个玩意儿,在c#中偶尔会用到,
但是在linux世界中则是无处不在。
譬如:find grep awk sed sort uniq cut等等命令。
vim中,也是经常用来搜索匹配替换字符串,
不会的时候,往往遇到一些稍微复杂的匹配条件,
就只能干瞪眼了,可学会了以后,那真是受益无穷,终生无憾。
实在是居家旅行、杀人放火的无上利器呀~~~~~哦也~~~~
要说练会正则表达式,精髓中的精髓,就是记住一点:
所谓正则表达式,无非就是普通字符,以及特殊字符(也叫元字符/,*,?)
的排列组合而已,所以牢记那些是元字符及其含义,就是重中之重,
当然其他的就是普通字符。
正则表达式,一句话表述清楚,就是使用元字符与普通字符的排列组合
形成的字符串,表示出你要匹配的内容。。。哦,说清楚了么。。。
基本元字符及其含义
字符 含义
------------------------------------------------------------
^ 只匹配行首
$ 只匹配行尾
| x|y匹配 x 或 y。例如,'z|food' 能匹配 "z" 或 "food"。
'(z|f)ood' 则匹配 "zood" 或 "food"。
\<,\> 匹配词首和词尾
\(...\) 正则表达式分组
* 匹配0个或多个字符
[] 只匹配[]内字符。可以使一个单字符,也可以是字符序列。
可以使用-表示[]内字符序列范围,如[1-5]=[12345]
[^pattern] 当"^"符号当直接靠着"[",意指否定或不匹配括号"[]"里内容
{} 匹配括号内的字符串,用,分隔,譬如:{abc,bcd},
\ 屏蔽一个元字符的特殊含义,既然有了元字符,那么\就非常重要。
. 只匹配任意单字符
pattern\{n\} 只用来匹配前面pattern出现的次数。n为次数。
pattern\{n\} 含义同上,但次数最少为n。
pattern\{n,m\} 含义同上,但pattern出现次数在n与m之间。
------------------------------------------------------------
上面了列出的只是常用的方式,记住了这些,估计99%的应用都可以满足了。
学些正则表达式,第一牢记元字符以及语法,第二多看几个例子,无他。
例子以后有时间会慢慢累加,下面列两个常用的匹配
ip地址以及日期的正则表达式实例:
匹配ip地址:
[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}\.[0-9]\{3\}
匹配日期,日期格式dd-mm-yyyy
[0-9]\{2\}-[0-9]\{2\}-[0-9]\{4\}
现在看起来,简单吧,无非是元字符、普通字符组合而已,
需要保持元字符原有含义的,就用转义符标记。
还有一类蛋疼的正则表达式类,列出来供参考,
我觉得没什么用,在这里介绍,只是为了以后玩意见到,
有什么文艺程序猿这样写,不会看不懂而已。
类 等价的正则表达式
--------------------------------------------------
[[:upper:]] [A-Z]
[[:alnum:]] [0-9a-zA-Z]
[[:lower:]] [a-z]
[[:space:]] 空格或tab键
[[:digit:]] [0-9]
[[:alpha:]] [a-zA-Z]
浙公网安备 33010602011771号