Vim文本编辑器
学习 Linux 命令行,就像要成为一名造诣很深的钢琴家一样,它不是我们一下午就能学会的技能。这需要经历几年的勤苦练习。我们将介绍 vi(发音“vee eye”)文本编辑器,它是 Unix 传统中核心程序之一。 vi 因它难用的用户界面而有点声名狼藉,但是当我们看到一位大师坐在钢琴前开始演奏时,我们的确成了伟大艺术的见证人。虽然我们在这里不能成为 vi 大师,当我们学完后,我们会知道怎样在 vi 中玩“筷子”。
为什么我们应该学习 vi ?
在现在这个图形编辑器和易于使用的基于文本编辑器的时代,比如说 nano,为什么我们还应该学习 vi 呢?下面有三个充分的理由:
vi 很多系统都预装。如果我们的系统没有图形界面,比方说一台远端服务器或者是一个 X 配置损坏了的本地系统,那么 vi 就成了我们的救星。虽然 nano 逐渐流行起来,但是它还没有普及。POSIX,这套 Unix 系统中程序兼容的标准,就要求系统要预装 vi。
vi 是轻量级且执行快速的编辑器。对于许多任务来说,启动 vi 比起在菜单中找到一个图形化文本编辑器,再等待编辑器数倍兆字节的数据加载而言,要容易的多。
另外,vi 是为了加快输入速度而设计的。我们将会看到,当一名熟练的 vi 用户在编辑文件时,他或她的手从不需要移开键盘。
背景介绍
第一版 vi 是在1976由 Bill Joy 写成的,当时他是加州大学伯克利分校的学生,后来他共同创建了 Sun 微系统公司。vi 这个名字来源于单词“visual”,因为它打算在带有可移动光标的视频终端上编辑文本。在发明可视化编辑器之前,有一次只能操作一行文本的行编辑器。为了指定一个修改,我们告诉行编辑器到一个特殊行并且说明做什么修改,比方说添加或删除文本。视频终端(而不是基于打印机的终端,像电传打印机)的出现,可视化编辑成为可能。vi 实际上整合了一个强大的叫做 ex 行编辑器, 所以我们在用vi 时能运行行编辑命令。大多数 Linux 发行版不包含真正的 vi;而是自带一款高级替代版本,叫vim(它“vi improved”的简写)由 Bram Moolenaar 开发的。vim 相对于传统的 Unix vi 来说,取得了实质性进步。通常,vim 在 Linux 系统中是“vi”的符号链接(或别名)。在随后的讨论中,我们将会假定我们有一个叫做“vi”的程序,但它其实是 vim。
Vim 有三种模式类型:编辑模式;输入模式;末行模式。
编辑模式:是Vim的默认模式,又叫做命令模式;
输入模式:又叫做插入模式;
末行模式:在命令模式下按下:(英文冒号)就进入了末行命令模式。末行命令模式可以输入单个或多个字符的命令,可用的命令非常多。
vim编辑器的使用及格式
vim [options] [/path/to/somefile]
模式转换:
编辑模式 --> 输入模式:
i:实现在当前光标所在处字符前面转换为输入模式;
a:实现在当前光标所在处字符后面转换为输入模式;
o:实现在当前光标所在行的下方新建一个空白行并转换为输入模式;
I:在当前光标所在行的行首转为输入模式;
A:在当前光标所在行的行尾转为输入模式;
O:在当前光标所在行的上方新建一行,并转为输入模式;
输入模式 --> 编辑模式:
按下Esc键;
编辑模式 --> 末行模式:
键入:(英文冒号)
末行模式 --> 编辑模式:
Esc,Esc (连续按两次)
光标跳转:
字符间跳转:
按键 | 移动光标 |
h |
向左移动,同左箭头效果 |
l | 向右移动,同右箭头效果 |
j | 向下移动,同下箭头效果 |
k | 向上移动,同上箭头效果 |
字符间多字符跳转:
# 可与上面字符组合使用,表示向某方向移动#个字符
按键 | 移动光标 |
#h | 向左侧跳转#个字符 |
#l | 向右侧跳转#个字符 |
#j | 向下面跳转#个字符 |
#k | 向上面跳转#个字符 |
如:6h表示向左跳转6个字符;6表示向右跳转6个字符。
单词间跳转:
w | 跳转至后一个单词的词首 |
e | 跳至当前或下一个单词词尾 |
b | 跳至当前或前一个单词词首 |
句子间跳转:
) |
跳转至下一句 |
( | 跳转至上一句 |
段落间跳转:
} |
跳转至下一段 |
{ | 跳转至前一段 |
行间跳转:
1G, gg | 跳转至行首 | 注:1G中1表示数字1 |
G | 跳转至行尾 | |
#G | 跳转至#行 | 注: #号表示数字序号 |
行内跳转:
^ | 跳转至行首的第一个非空白字符 | |
$ | 绝对行尾 | |
0 | 绝对行首 | 注: 0为数字0 |
打开文件:
格式: vim [options] /path/to/file
vim +# /path/to/file
如: vim +8 /etc/init.d/functions 表示打开指定文件并跳转至第#行
打开多个文件:
格式: vim [options] /path/to/file /path/to/file
如: vim /etc/init.d/functions /etc/fstab 表示打开指定多个文件
注: 输入前需转换至末行模式:
next | 跳转至下一个打开文件 |
prev | 跳转至上一个打开文件 |
first | 跳转至第一个打开文件 |
last | 跳转至最后一个打开文件 |
-O | 垂直分割窗口 |
-o | 水平分割窗口 |
如: vim -O /etc/init.d/functions /etc/fstab 垂直分割窗口
关闭文件:
注: 输入前需转换至末行模式:
w |
保存 |
q | 退出 |
! |
强制 |
wq | 保存退出 |
q! | 强制退出 |
x | 保存退出 |
在编辑模式下:
ZZ | 保存退出 |
wall | 保存所有 |
qall | 退出所有 |
wqall |
保存退出所有 |
编辑命令
删除命令: d
x |
删除单个字符 |
#x |
删除光标所在处后面#个字符 |
dw |
删除单词至下个单词词首 |
de |
删除光标所在处的后的一个单词 |
db |
删除光标所在处的前的一个单词 |
d^ |
删除光标所在处至行首的内容 |
d$ |
删除光标所在处至行尾的内容 |
dd |
删除光标所在行 |
#dd |
删除光标所在行及向下#行 |
在末行模式下使用d命令
末行模式支持范围指定、地址定界
格式: 起始地址,结束地址
$ | 最后一行 |
. | 当前光标所在行 |
% | 全文 |
如: 1,7d 表示删除第1至7行
1,$ 表示第1行至最后一行
在地址定界时还支持相对表达法
如: 1,+6 表示从第1行开始往下6行,即包括第1行在内共7行
1,$-2 表示从第1行开始至第倒数3行
.,+3 表示从当前行开始往下3行,即包括第1行在内共4行
编辑操作可撤销:(在未保存之前)
vim默认会最近50次的操作,u命令可逐一撤消此前的编辑操作
u |
逐一撤消此前的编辑操作 | 注:需在编辑模式下使用 |
Ctrl+r |
撤消此前的撤消 | 与u选项相反 |
粘贴操作: p
删除的是整行 | 删除的不是整行 | ||
p |
p:小写 在当前光标所在行的下方粘贴 |
p |
p:小写 在当前光标所在处字符的后方粘贴 |
P |
P:大写 在当前光标所在行的上方粘贴 | P |
P:大写 在当前光标所在处字符的前方粘贴 |
复制操作: y
yy |
复制当前光标所在行 |
#yy |
复制当前光标所在向下#行 |
y^ |
复制当前光标处至行首 |
y$ |
复制当前光标处至行尾 |
复制的是整行 | 复制的不是整行 | ||
p |
p:小写 在当前光标所在行的下方粘贴 | p |
p:小写 在当前光标所在处字符的后方粘贴 |
P |
P:大写 在当前光标所在行的上方粘贴 | P |
P:大写 在当前光标所在处字符的前方粘贴 |
文本搜索:
文件搜索查找支持正则表达式匹配
如:/\<d[[:alpha:]]\{2\}n\> 字母d后有两个字母后跟n的单词
/keyword | 从当前光标所在处向文件尾部查找 |
?keyword: | 从当前光标所在处向文件首部查找 |
n |
下一个,跟查找命令相同的方向 |
N |
前一个,跟查找命令相反的方向 |
翻屏快捷键:
Ctrl+f | 向文件尾部翻一屏 |
Ctrl+b | 向文件首部翻一屏 |
Ctrl+d | 向文件尾部翻半屏 |
Ctrl+u | 向文件首部翻半屏 |
另外一种编辑命令
c |
编辑,转换至输入模式 |
cc |
删除所在行内容并且转换为输入模式 |
#cc |
删除#行内容并转换为输入模式 |
c^ |
删除至行首的第一个非空白字符处并转换为输入模式 |
c$ |
删除所在行内容到行尾并转换为输入模式 |
c0 |
删除至行首并转换为输入模式 |
vim可视化模式
visual模式
v:选中光标划过的字符
V:选中光标划过的行,整行选取
按两下“Esc”键回到编辑模式
同一文档窗口分割:
Ctrl+w 再按s水平分割文件
Ctrl+w 再按v垂直分割文件
Ctrl+w 再按箭头选择文件
窗口属性定义:
set nu :显示行号
set nonu :取消显示行号
set ai :自动缩进
set noai :取消自动缩进
set ic :不区分字符大小写
set noic :取消不区分字符大小写
set sm :显示匹配的括号
set nosm :取消显示匹配的括号
syntax on :语法着色
syntax off :取消语法着色
set nohlsearch :取消高亮显示
vim的配置文件:
全局:/etc/vimrc 只有管理员有权限修改配置,修改后对所有用户有效
个人:~/.vimrc 此文件实际不存在,自己创建即可。修改后只对当前用户有效
由于shell只对当前用户有效,重启后将无效。所以需要修改配置文件
全局查找和替代
末行模式下:
地址定界s/查找模式/替换成的内容/gi
地址定界[email protected]查找模式@替换成的内容@gi
例:某个文档"/dev/null"替换为"/tmp/a.txt"
%s/\/dev\/null/\/tmp\/a.txt/g
%[email protected]/dev/[email protected]/tmp/[email protected]
我们把这个命令分解为几个单独的部分,看一下每部分的含义:
条目 | 含义 |
: |
冒号字符运行一个 ex 命令 |
% |
指定要操作的行数。% 是一个快捷方式,表示从第一行到最后一行。或者用 1,$ 来代替,意思是 “ 从第一行到文件的最后一行。” 如果省略了文本行的范围,那么操作只对当前行生效。 |
s |
指定操作。在这种情况下是,替换(查找与替代 |
/Line/line | 查找类型与替代文本 |
g |
这是“全局”的意思,意味着对文本行中所有匹配的字符串执行查找和替换操作。如果省略 g,则 只替换每个文本行中第一个匹配的字符串。 |
转载于:https://blog.51cto.com/mydove/1391916