一、vi
vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样.
二、vim
vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;
vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。
vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。
三、vi的三种模式
命令行模式:
在命令行模式下,任何键盘输入都是命令.
插入模式:
替换模式:
在插入模式和替换模式下,键盘输入的才是字符。
插入模式和替换模式也合称为编辑模式。
四、vi command
- 打开文件
#创建/打开文件
#打开一个文件,如果文件不存在,就创建它。
vi 文件名
- 模式切换
Esc 从编辑模式切换到命令行模式。
#下面命令区分大小写
#由命令行模式进入编辑模式
i 在光标所在位置 前面开始插入。
a 在光标所在的位置 后面开始插入。
o 在光标所在位置行的 下面插入空白行 且光标跟随新插入的行。
O 在光标所在位置行的 上面插入空白行 且光标跟随新插入的行。
I 在光标所在位置行的行首开始插入。
A 在光标所在位置行的行末开始插入。
- 光标移动
以下命令都是命令行模式下:
下面的命令和上下左右键的作用是一样的。
k 类似方向键上。
j 类似方向键下。
h 类似方向键左。
l (小写L)类似方向键右。
- 翻页
以下命令都是命令行模式下:
Ctrl+u 向上翻半页。
Ctrl+d 向下翻页。
5. 光标所在位置的行号和文件的总行数
以下命令都是命令行模式下:
Ctrl+g 显示光标所在位置的行号和文件的总行数。
- 光标跳转
以下命令都是命令行模式下:
文件内跳转:
nG #光标跳到文件的第n行行首。
gg #光标跳到文件第一行行首。
G #光标跳到文件最后一行行尾。
行跳转:
:5+回车 #光标跳到第5行。
:n+回车 #光标跳到第n行。
0 #光标跳到当前行的行首。
$ #光标跳到当前行的行尾。
单词光标跳转:
w #光标跳到下个单词的开头。
b # 光标跳到上个单词的开头。
e # 光标跳到本单词的尾部。
符号跳转:
% #在一对小括号或中括号上跳转
- 删除
1.命令行模式下:
这些删除其实都是剪切,vim没有直接删除的功能。
利用光标删除行:
dd #删除光标所在位置的一行。
ndd #如"3dd"表示删除光标所在位置开始的3行。
D #删除光标至行尾的数据
d+$ #删除光标至行尾的数据
利用光标删除单个字符:
x #删除当前字符且工作模式不变
s #删除当前字符,且工作模式变为插入模式
利用光标删除单词:
dw #删除整个单词或删除光标至单词结尾
d0 #删除光标至行首
删除指定区域数据:
v #进入VISUAL模式
按方向键选中数据
再按 d 删除相应数据.
- 复制粘贴
1.命令行模式下:
光标位置的复制粘贴
#复制成功会有提示
yy #将光标所在位置的一行复制到缓冲区。
nyy #将光标所在位置的n行复制到缓冲区。
p #小写p 将缓冲区里的内容粘贴到光标后。
P #大写P 将缓冲区里的内容粘贴到光标前。
#以下两个命令在windows和UNIX中是通用的。
Ctl+insert #复制鼠标选中的文本,相当于Ctl+c。
Shift+insert #输出鼠标选中的文本,相当于Ctl+v。
- 替换
1.命令行模式下:
字符替换:
r #(replace)替换光标所在位置的一个字符,不会改变编辑模式
R #从光标所在位置开始替换,直到按下"Esc"。
~ #对光标当前所在的位置的字符进行大小写转换。
单词替换:
cw #从光标所在位置开始替换单词,直到按下"Esc"。
行数据替换:
J #把当前行的下一行接到当前行的尾部。
:s /原数据/新数据 # 末行模式下,一定要将光标停留在待替换行上,只替换该行第一个对应原数据的数据
全篇替换:
:%s /原数据/新数据 #末行模式下,只替换全篇数据每一行第一个对应原数据的数据
:%s /原数据/新数据/g #末行模式下,替换全篇对应的原数据
指定行替换:
:起始行号,终止行号s /原数据/新数据/g #末行模式下,替换指定行间对应的全部原数据
- 撤销和重复命令
以下命令都是命令行模式下:
u 撤销命令,可多次撤销。
ctrl+r 恢复撤销命令
. 重复执行上一次执行的vi命令。
- 查找
命令行模式下:
查找指定字符串:
/abcd #在当前打开的文件中查找“abcd”文本内容。
敲回车再使用下面功能
n 查找下一个。
N 查找上一下。
查找指定字符:
光标停在该字符上
命令模式下:* 查找下一个
# (这个不是注释,是井字符)查找上一个
- 分屏
:sp #分横屏
:vsp #分竖屏
ctrl+ww #光标在不同分屏间切换
:q #退出光标所在分屏
:qall #退出所有分屏
高级用法:
:vsp hello.h #分屏并指定分屏的文件为hello.h。保存后会创建相应文件
- 保存退出
命令行模式下:
:w回车 存盘。
:w!回车 强制存盘。
:wq回车 存盘退出。
:x回车 存盘退出。
:q回车 不存盘退出。
:q!回车 不存盘强制退出。
- 光标问题
命令行模式下:
#lock terminal
ctrl+s
#unlock terminal
ctrl+q
- 代码相关
自动格式化代码格式:
gg=G #。只能调整一般的格式,复杂的不起作用
跳转至man手册:
光标至于寒暑表单词上,使用 K 跳转
指定卷(n为任意) nK
查看宏定义:
将光标置于待查看宏定义单词上,使用 [+d 查看定义语句(注意:只在本文件中找,跨文件无效)。
- 可以在vim命令行模式下直接执行语句
:ls -l
:! gcc hello.c -o hello
五、vim配置
1.系统根目录下,如果没有2的配置就显示这个
/etc/vim/vimrc
2.用户目录下
~/.vimrc
优先级更高,优先显示该配置
具体配置内容可去百度上下载替换即可。
我自己用配置如下:
set nu "显示行号
set syntax=on " 语法高亮
set confirm " 在处理未保存或只读文件的时候,弹出确认
set autoindent " 自动缩进
set cindent
set tabstop=4 " Tab键的宽度
set softtabstop=4 " 统一缩进为4
set shiftwidth=4
set noexpandtab " 不要用空格代替制表符
set smarttab " 在行和段开始处使用制表符
set number " 显示行号
set history=1000 " 历史记录数
set nobackup "禁止生成临时文件
set noswapfile
set ignorecase "搜索忽略大小写
set hlsearch "搜索逐字符高亮
set incsearch
set nobackup "从不备份
hi LineNr ctermfg=239 ctermbg=235 "行号栏
六、打开文件报错问题
报错如下:
使用如下命令清除问题文件:
rm .*.swp
#上面的不行就尝试下面的
rm -rf .*.swp
然后再次打开该文件就不会报错了。
打开文件中文乱码问题
修改etc/vimrc
文件:
添加一下代码:
set fileencodings=utf-8,gbk,latin1
pl@pl-virtual-machine:/etc/vim$ sudo vim vimrc
#用超级权限进入才能修改后保存,否则打开的是只读文件,修改后无法保存