【Linux命令】《鸟哥Linux基础》第九章 vim程序编辑器

第九章 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编码,而环境使用的是LinuxGNOME,启动的终端界面为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
原文地址:https://www.cnblogs.com/dindin1995/p/13059059.html