目录
Vim基本用法
Vim 简介:Vim是一个功能强大的全屏幕文本编辑器,是Linux/UNIX上最常用的文本编辑器,
它的作用是建立、编辑、显示文本文件。Vim 没有菜单,只有命令。www.vim.org
Vim 工作模式:
插入命令 aio/AIO
a 在光标所在字符后插入
A 在光标所在行尾插入
i 在光标所在字符前插入
I 在光标所在行行首插入
o 在光标下插入新行
O 在光标上插入新行
【开始演示】
首先,使用vim 命令可以创建一个新文件
回车后,首先进入的是命令模式,可以按下i 之后输入内容。
按下Esc 退出编辑,然后 :wq 保存并退出,可以打开此文件查看:
再次用vim 编辑此文件,要在字符 ”Linux” 之后插入内容,将光标放在其之后,按下 小写的a,可以在其后进行编辑;
或者在本行的任意位置按下 大写的A,也可以将光标定位于本行末尾,然后进行编辑。其他的i/I和o/O 同理。
定位命令
:set nu 设置行号
:set nonu 取消行号
gg 到第一行
G 到最后一行
nG 到第n行
:n 到第n行
$ 移至行尾
0 移至行首
为方便演示,这里将系统的一个文件复制一份:
设置行号:
取消行号:
到第1000行:
删除命令(分为 删除字符 和 删除行)
x 删除光标所在处字符(和Del键一样)
nx 删除光标所在处后n个字符
dd 删除光标所在行
ndd 删除n行
dG 删除光标所在行到文件末尾内容
D 删除光标所在处到行尾内容
:n1,n2d 删除指定范围的行
删除 999-1006 行的内容
复制和剪切命令
yy 复制当前行
nyy 复制当前行以下n行
dd 剪切当前行
ndd 剪切当前行以下n行
p、P 粘贴在当前光标所在行下或行上
替换和取消命令
r 取代光标所在处字符
R 从光标所在处开始替换字符,按Esc结束
u 取消上一步操作(相当于windows的撤销,Ctrl+Z)
搜索和搜索替换命令
/string 搜索指定字符串
搜索时忽略大小写 :set ic
n 搜索指定字符串的下一个出现位置
:%s/old/new/g 全文替换指定字符串
:n1,n2s/old/new/g 在一定范围内替换指定字符串
搜索字符“ftp”,按下“n”继续搜索下一个。
若要忽略大小写,按下 :set ic ,然后搜索
要区别大小写,执行 :set noic
关于替换:
案例演示:将所有的 字符“ftp” 替换为 “renxing”
接下来,指定9089行 到 9095行 的”renxing” 被替换为 “***”,此次使用 /c,将每次询问,需要替换按下y,不需要替换按下n
保存和退出命令
:w 保存修改
:w new_filename 另存为指定文件
:wq 保存修改并退出
ZZ 快捷键,保存修改并退出
:q! 不保存修改退出
:wq! 保存修改并退出(文件所有者及root可使用)——此例发生的情景是root 可以强制覆盖一个其他普通用户创建的文件
【总结】
Vim使用技巧
① 导入命令执行结果 :r !命令
② 定义快捷键 :map 快捷键 触发命令
范例:
: map ^P I#<ESC> 添加注释快捷键
: map ^B 0x 取消注释快捷键
③ 连续行注释
:n1,n2s/^/#/g
:n1,n2s/^#//g
:n1,n2s/^/\/\//g
④ 替换
:ab mymail samlee@lampbrother.net
演示:vim 创建一个新文件,并输入一些内容:
示例 ① 导入命令:
使用 :r /etc/issue 就可将/etc/issue导入到当前光标所在位置:
扩展:在vim之中也可以使用 :!which 查看某个命令:
有时候我们需要在编辑状态下查看并导入某个命令的执行结果。例如要在文档的末尾插入当前时间,就需要先查看当前时间,然后再手动输入。
这样会很麻烦,于是可以直接使用 :r !date 查看并导入当前时间到当前文档。
上面三个的总结:
冒号(:) + r 文档名 可以在不退出编辑的情况下导入某个文件到当前文档;
冒号(:) + ! 命令 可以在不退出编辑的情况下执行系统的某个命令;
冒号(:) + r ! 命令 可以在不退出编辑的情况下导入系统的某个命令的执行结果。
示例 ② 定义快捷键:
此案例演示 注释(行首加 # 号)的快捷键:
常规来讲,需要到行首,然后进入编辑模式,然后输入#号,再然后回到命令模式。那么,如下转化::map ^P I#<ESC>
说明:
冒号(:) + map 定义快捷键;
^P 按下Ctrl+V+p(或者先按下Ctrl+V 再按下 Ctrl+p)(这个是自己定义的,不一定非要是Ctrl+p,也可以是Ctrl+其他字母)
I 回到行首,然后进入编辑模式
# 输入#号
<ESC> 相当于按下ESC退出编辑,回到命令模式
该命令执行完以后,回到任意一行,只要按下Ctrl + p 即可对这一行行首添加 # 号(即 注释该行)
接下来演示取消注释的快捷键(即 删掉行首的#号):map ^B 0x
说明:
冒号(:) + map 定义快捷键;
^B 按下Ctrl+V+b(或者先按下Ctrl+V 再按下 Ctrl+b)(当然,这个也是自定义的)
0 光标回到行首(只回到行首,不进行编辑)
x 删除光标所在位置的字符(即删除行首的第一个字符)
该命令执行完以后,回到任意一行,只要按下Ctrl + b 即可对这一行行首的 # 号删除(即 取消注释)
扩展:比如也可以定义一个快捷键来插入邮箱地址:
分析:假设定义的快捷键是Ctrl + h ,于是可以这样
:map ^H irenxing9999@qq.com<ESC>
表示:进入插入模式(小写的 i),然后是邮箱地址,然后返回命令模式。
然后按下 Ctrl + h 即可把刚才定义的邮箱快捷键插入到文档:
示例 ③ 连续行注释:
有时候需要连续注释好多行,可以使用
:n1,n2s/^/#/g
说明:
冒号(:) + n1,n2 从第n1行开始,到第n2行结束;
/^ (shift 6) “开始”的意思,可以参考正则的表示意义
/#/ #号,注释的意思
g 不进行询问
* 现在要对第3到7行进行注释,就使用
:3,7s/^/#/g
相反的,如果需要取消这些注释,就使用
:n1,n2s/^#//g
冒号(:) + n1,n2 从第n1行开始,到第n2行结束;
/^# 以#号开始;
// 空的
g 不进行询问
* 现在要对第3到7行取消刚才的注释,就使用 :3,7s/^#//g
补充说明一下:如果是 :3,7s/^#//g 表示只去掉行首的#号,如果要去掉指定行的所有的#行,使用 :3,7s/#//g,即去掉 ^ 符号即可。
对于PHP等很多编程语言,注释用的是 双斜杠 // ,那么就要这样使用: :n1,n2s/^/\/\//g
/^/ 表示开头 和 分隔符
\/\/ 表示双斜杠 // ,但是需要转意,即 \/\/
取消注释同理:
示例 ④ 替换:
:ab mymail samlee@lampbrother.net
意思就是,可以自定义一个符号(字符串),表示的是另外一个比较长的字符串。
比如说:当我希望输入 aa 的 时候变成这样一句话: HelloWorld...
就可以使用 :ab aa HelloWorld...
然后,当我输入aa ,然后空格或者回车:
总结扩展说明:
如果想要永久保存这样的配置,只需要在对应的用户的家目录下创建一个文件 .vimrc
例如,root用户,这样的命令:
然后在这个文件里面编辑,然后保存:
这个配置文件的含义是:永远显示行号,还有对应的快捷键。
此时如果新建一个文档或者打开已有文档,就会默认显示行号,并且当输入某个快捷键的时候,就会替换成设置好的对应的文字。
记住:如果是root用户,配置文件就是在 /root/.vimrc ;如果是普通用户,配置文件就是在 /home/username/.vimrc