在linux中,常用的编辑器,大概有2个半,vi或者vim,emacs,还有个简单的nano。有人说程序猿分为三种,一种是使用vim的,还有一 种使用emacs的,剩下的都是第三种。用现在一个时髦的比方,普通程序猿用emacs或者类似的vs,文艺程序猿用vim,二逼程序猿用其他。由此可见 VIM的强大程度,这是一款非常适合程序员使用的,熟练了以后会上瘾的编辑器。vim设计了多种模式,常见的模式包括命令模式,编辑模式,命令行模式等, 这个也是和其他编辑器一个很不相同的地方,用习惯了ms的各种文本编辑器,可能会比较不习惯,但是如果将模式熟悉了就可以发现在不同的模式之间切换是很平 常的事情,而且带来的好处是更少的按键和更快的输入。
VIM是VI的优秀后裔,虽然VI的后裔中不仅仅包括VIM,但是VIM是实现对VI的兼容性最好的编辑器,其他的后裔还包括STEVIE, ELvis, NVi, Vile等。除了实现对VI的兼容性外,VIM还扩展了很多的功能,包括语法高亮,代码折叠,脚本扩展等等。
vim我也是初学乍练,开始也是因为在linux中,写shell用这个比较方便,同时也没有更多的选择,只是被迫的使用,可一来二去,当度过了记忆那 些头疼的键盘指令后,才开始渐入佳境。与windows种那些常用的文本编辑器如:vs,word,notepad比较,vim入门显然是比较难的,可如 果用习惯了以后,也许就会迷恋上这种不使用鼠标甚至小键盘的设计。废话少说,言归正传,把使用心得记录下来,供今后参考。
一、三种模式
vim的工作模式:
1.命令模式(Command mode) ESC进入命令模式。
2.编辑模式(Insert mode) ESC可退出此模式。
3.命令行模式(Command line mode) 输入":"进入此模式。
深入理解这三种模式,是vim的根本。
二、启动、保存与退出
打开vim编辑文档,常用的无非是:vim filename的方式。
至于还有写蛋疼的譬如定位到第几行之类的参数,一般用不着,
进入vim可以用xxxG,或者:xxx来定位,不记也罢。
还有两种用的到的打开方式,一种是同时打开多个文件,
如:
vim file1 file2 file3
vin 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 取消现实行号
--------------------------------------------------------------
还有一个,尤其是对于编写程序比较方便的块移动的方式,多是用各种大中花括号,
尤其是%对于写乱了套的程序猿来说,还是非常有用的,
这个写程序是多自己试试:
快捷键 功能 记忆方式
--------------------------------------------------------------
) 定位到下一句开始
( 定位到当前句开始
{ 上一段
} 下一段
% 对应括号
[
]
--------------------------------------------------------------
方括号的,我忘了。。。懒得试了。
四、搜索
常用的无非是下面的5个指令。
快捷键 功能 记忆方式
--------------------------------------------------------------
/search_string 从当前行向下查找“search_string”
?search_string 从当前行向上查找“search_string”
n 继续查找下一个“search_string”
N 继续查找上一个“search_string”
/serrch_string\c 忽略大小写
--------------------------------------------------------------
还有一些使用正则表达式进行匹配的方式,以后再进行补充。
另外,按说替换应该与搜索同列一个专题,但是。。。懒得写了,那个以后写编辑篇的时候,
再说吧。
浙公网安备 33010602011771号