第九章 vim程序编辑器
9.1 vi与vim
所有的Linux发行版都有vi文本编辑器。
vim是高级版的vi,对不同内容可以进行不同颜色显示,就是个性能强悍的代码编辑器。
9.2 按键说明
9.2.1 一般命令行可用的按键功能说明
移动光标的方法 | 具体情况 |
---|---|
h 或 向左箭头 | 光标向左移动一个字符 |
j 或 向下箭头 | 光标向下移动一个字符 |
k 或 向上箭头 | 光标向上移动一个字符 |
l 或 向右箭头 | 光标向右移动一个字符 |
30j 或 30向左箭头 | 向下移动30行 |
Ctrl + f | 屏幕向下移动一页,相当于page down按键【常用】 |
Ctrl + b | 屏幕向上移动一页,相当于page up按键【常用】 |
Ctrl + d | 屏幕向下移动半页 |
Ctrl + u | 屏幕向上移动半页 |
+ | 光标移动到非空格字符的下一行 |
- | 光标移动到非空格字符的上一行 |
n + 空格键 | 那个n表示数字,按下数字后再按下空格键,光标会向右移动这一行的n个字符 |
0 或 功能键home | 按下数字0或home键,移动到这一行的最前面字符处【常用】 |
$ 或 功能键End | 移动到这一行的最后面字符处【常用】 |
H | 光标移动到这个屏幕的最上方那一行的第一个字符 |
M | 光标移动到这个屏幕的中央那一行的第一个字符 |
L | 光标移动到这个屏幕的最下方那一行的第一个字符 |
G | 移动到这个文件的最后一行【常用】 |
nG | n为数字,移动到这个文件的第n行,可配合:set nu |
gg | 移动到这个文件的第一行,相当于1G【常用】 |
n + 功能键Enter | n为数字,光标向下移动n行【常用】 |
查找与替换 | 具体情况 |
---|---|
/word | 向光标之下寻找一个名称为word的字符串 |
?word | 向光标之上查找一个名称为word的字符串 |
n | 这个n是英文按键,代表重复前一个查找的操作。如果是向上查找word,那么继续向上查找word;如果向下查找word,那么继续向下查找word |
N | 这个N是英文按键,与n刚好相反,为反向进行前一个查找。例如/word之后,本来是向下查找word的,但是按下N,会向上查找word。【使用/word配合n和N重复查找一些关键词】 |
:n1,n2s/word1/word2/g | n1和n2为数字,在第n1和n2行之间寻找word1这个字符串,并将其替换为word2【常用】 |
:1,$s/word1/word2/g | 从第一行到最后一行,寻找word1字符串,并将其替换为word2【常用】 |
:1,$s/word1/word2/gc | 替换之前显示提示字符给用户,确认confirm是否需要替换【常用】 |
删除、复制、粘贴 | 具体情况 |
---|---|
x与X | 在一行当中,x为向后删除一个字符(del键),X为向前删除一个字符(backspace键)【常用】 |
nx | n为数字,连续向后删除n个字符。10x连续向后删除10个字符 |
dd | 剪切光标所在行【常用】 |
ndd | 剪切光标所在的向下n行。20dd剪切20行【常用】 |
d1G | 剪切光标所在到第一行的所有数据 |
dG | 剪切光标所在到最后一行的所有数据 |
d$ | 剪切光标所在处,到该行最后一个字符 |
d0 | 是数字0,剪切光标所在处,到该行第一个字符 |
yy | 复制光标所在的那一行【常用】 |
nyy | 复制光标所在的向下n行。20yy复制20行【常用】 |
y1G | 复制光标所在到第一行的所有数据 |
yG | 复制光标所在到最后一行的所有数据 |
y$ | 复制光标所在处,到该行最后一个字符 |
y0 | 是数字0,复制光标所在处,到该行第一个字符 |
p和P | p为将已复制的数据在光标下一行粘贴;P为将已复制的数据在光标上一行粘贴【常用】 |
J | 将光标所在行与下一行的数据结合成一行 |
c | 重复删除多个数据。10cj向下删除10行 |
u | 恢复前一个操作【常用】 |
Ctrl + r | 重做上一个操作【常用】 |
. | 小数点,重复前一个操作【常用】 |
9.2.2 一般命令行切换到编辑模式的可用按键功能说明
进入插入或替换的编辑模式 | 具体情况 |
---|---|
i与I | 进入插入模式,i为从目前光标所在处插入,I为在目前所在行的第一个非空格符处开始插入【常用】 |
a与A | 进入插入模式,a为从目前光标所在的下一个字符处开始插入,A为从光标所在行的最后一个字符处开始插入【常用】 |
o与O | 进入插入模式,o为在目前光标所在的下一行处插入新的一行,O为在目前光标所在处的上一行插入新的一行【常用】 |
r与R | 进入替换模式,r只会替换光标所在那一个字符一次,R会一直替换光标所在的文字,直到按下Esc为止【常用】 |
Esc | 退出编辑模式,回到一般命令模式中【常用】 |
9.2.3 一般命令行切换到命令行模式的可用按键功能说明
命令行模式的保存、退出等命令 | 具体情况 |
---|---|
:w | 将编辑的数据写入硬盘文件中【常用】 |
:w! | 若文件属性为只读时,强制写入该文件。不过到底能否成功写入,还是跟你对该文件的权限有关 |
:q | 退出vi【常用】 |
:q! | 若曾修改过文件,又不想保存,使用!为强制退出不保存 |
:wq | 保存后退出,若为:wq!则为强制保存后退出 |
ZZ | 大写的Z,若文件已经修改则保存后退出,若文件没有修改则不保存退出 |
:w [filename] | 将编辑的数据另存为filename文件 |
:r [filename] | 在编辑的数据中,读入另一个文件的数据,就是将filename这个文件内容加到光标所在行后面 |
:n1,n2 w [filename] | 将n1到n2的内容保存为filename文件 |
:! command | 暂时退出vi到命令行模式下执行command的显示结果。:! ls/home 可在vi当中查看/home下以ls输出的文件信息 |
:set nu | 显示行号 |
:set nonu | 取消显示行号 |
9.2.4 vim的缓存、恢复问题
如果不幸宕机,可从缓存文件恢复。
模拟宕机:
vim man_db.conf
ctrl + z
kill -9 %1
此时杀掉了后台进程,但是由于是非正常退出,缓存文件并不会正常消失,它还存在
缓存文件名为`.man_db.conf.swap`
进行恢复:
vim man_db.conf 这是就会提示各种警告信息
点击R后,输入 :wq 保存并退出文件
然后手动删除缓存文件 rm -f .man_db.conf.swap
最后再 vim man_db.conf
即可恢复正常
9.3 vim的额外功能
9.3.1 可视区块 virtual block
可视区块的按键 | 具体情况 |
---|---|
v | 字符选择,会将光标经过的地方反白选择 |
V | 行选择,会将光标经过的行反白选择 |
Ctrl + v | 可视区块,可以用矩形的方式选择数据 |
y | 将反白的地方复制起来 |
d | 将反白的地方删掉 |
p | 将刚刚复制的区块,在光标所在处粘贴 |
9.3.2 多文件编辑
vi中,使用:r filename
可以读入整个filename文件;如果只想读入一部分内容,可使用多文件编辑命令。
多文件编辑按键 | 具体情况 |
---|---|
:n | 编辑下一个文件 |
:N | 编辑上一个文件 |
:files | 列出目前这个vim开启的所有文件 |
使用vim file1 file2
同时打开两个文件,其中file1是第一个文件,file2是最后一个文件。
9.3.3 多窗口功能
多窗口按键 | 具体情况 |
---|---|
:sp [filename] |
打开一个新窗口,如果有加filename,表示在新窗口创建一个新文件,否则表示两个窗口为同一个文件(同步显示) |
Ctrl + w + j 或者 Ctrl + w + 向下箭头 |
先同时按下Ctrl + w,然后再按下j或向下箭头,光标移动到下方的窗口 |
Ctrl + w + k 或者 Ctrl + w + 向上箭头 |
先同时按下Ctrl + w,然后再按下k或向上箭头,光标移动到上方的窗口 |
Ctrl + w + q |
先同时按下Ctrl + w,然后再按下q,结束当前窗口;或者输入:q 或者:close |
先vim file1
如果:sp
,会在下方再开一个窗口,内容与file1
相同;
如果:sp file2
,会在下方再开一个窗口,内容是file2
。
9.3.4 vim的关键词补全功能
编辑器两大要求:
语法检验
关键词补全
关键词补全按键 | 具体情况 |
---|---|
ctrl+x -> ctrl+n | 通过目前正在编辑的这个文件的内容文字作为关键词,予以补齐 |
ctrl+x -> ctrl+f | 以当前目录内的文件名作为关键词,予以补齐 |
ctrl+x -> ctrl+o | 以扩展名作为语法补充,以vim内置的关键词,予以补齐 |
9.3.5 环境设置与记录 ~/.vimrc ~/viminfo
vim的环境设置按键 | 具体情况 |
---|---|
:set nu | 显示行号 |
:set nonu | 忽略行号 |
:set hlsearch | 高亮度查找,找到的字符串反白显示 |
:set nohlsearch | 非高亮度查找 |
:set autoindent | 自动缩进 |
:set noautoindent | 不自动缩进 |
:set backup | 自动保存备份文件,任何一次修改file时,同目录中,源文件被另存为一个文件名为file~的文件 |
:set ruler | 显示或不显示右下角的一些状态栏说明 |
:set showmode | 是否显示–INSERT–之类信息在左下角状态栏 |
:set backspace=(012) | 按下i进入编辑模式后,可以利用退格键(backspace)删除任意字符。2,可删任意值;0或1,仅可删除刚刚输入的字符,无法删除原本就已经存在的文字 |
:set all | 显示目前所有的环境参数设置值 |
:set | 显示与默认值不同的参数,显示你自行变动过的参数 |
:syntax on | 依据程序相关语法显示不同颜色 |
:syntax off | 纯文本颜色 |
:set bg=dark | 设置显示的不同色调 |
:setbg=light | 同上,系统默认是light |
vim ~/.vimrc 在用户家目录下,创建.vimrc 文件,设置vim编辑器的默认值
打开文件后,输入以下内容并保存:
set hlsearch
set backspace=2
set autoindent
set ruler
set showmode
set nu
set bg=dark
syntax on
9.4 其他vim使用注意事项
9.4.1 中文编码问题
如果文件是GBK
编码,而环境使用的是Linux
的GNOME
,启动的终端界面为GNOME-terminal
,采用如下方法修正打开后的乱码问题:
首先:
LANG=zh_CN.gb18030
export LC_ALL=zh_CN.gb18030
在终端工具栏:终端—》设置字符编码—》中文(简体),选择好中文简体后,就可以用vim去打开GBK编码的文件了。
9.4.2 DOS与Linux换行符
Windows的DOS下换行符是: ^M$ = CR + LF
Linux下换行符是: $ = LF
需要安装dos2unix-*
在不同系统之间复制一些纯文本文件时,务必要记得使用unix2dos 或 dos2unix来转换换行格式!
unix2dos -k file1 将file1中的换行符换成dos下的,同时不改变mtime时间
dos2unix -k file1 将file1中的换行符换成unix下的,同时不改变mtime时间
dos2unix -k -n file1 file2 跟之前一样把file1中的换行符换成unix下的,保留旧文件file1,换好后保存到新文件file2
9.4.3 语系编码转换
iconv --list
iconv -f 原编码格式 -t 新编码格式 filename [-o newfile]
--list 列出iconv支持的语系数据
-f from,来自于哪个编码格式
-t to,要变成哪个编码格式
-o file 如果要保留原本文件,那么使用-o新文件名,可以建立新的编码文件
iconv -f big5 -t utf8 vi.big5 -o vi.utf8 将big5格式的vi.big5转换为utf8格式的vi.utf8
iconv -f utf8 -t big5 vi.utf8 |
iconv -f big5 -t gb2312 |
iconv -f gb2312 -t utf8 -o vi.gb.utf8 将繁体中文的utf8转换成简体中文的utf8