首先 vi 和 vim 是一个文本编辑器,
类似于Windows系统中的记事本,
也是Linux / Unix系统中标准的编辑器,
在Linux和Unix系统的任何版本,
vi / vim编辑器都是完全相同的。
注意:
- 文本编辑器 是用作编写普通文字的 应用软件,它与文档编辑器(或称文字处理器;例如Word)的不同之处在于它并非用于 桌面排版(例如文档格式处理)而是常用于编写程序的 源代码。
- 文本文件 是指以 ASCII 码方式(也称文本方式)存储的文件。
可以把 vim 看作是 vi 的升级版,它不仅兼容 vi 的所有指令,还有一些新的特性在里面。
vi 和 vim 的主要区别是:
一、'搜索不同'
vi : vi不支持正则表达式的搜索。
vim: vim支持正则表达式的搜索。
二、'脚本语言不同'
vi : vi没有自己的脚本语言,只是在Unix及Linux系统下进行编程的工具。
vim: vim有自己的脚本语言,称为vim脚本(也称为vimsscript或VimL),用户可以通过多种方式使用它来增强vim。
三、'共享不同'
vi : vi不具有高度可配置性,无法和各个vi之间安装共享文件。
vim: vim具有高度可配置性,包含vim核心全局设置(称为vimrc)的文件可以在各个vim之间共享。
文本编辑器辣么多,为啥一定要学好 vi / vim呢?
其实是有原因的!因为:
· 所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器不一定会存在;
· 很多个别软件的编辑接口都会主动呼叫 vi(例如:crontab、visudo、edquoda);
· vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便了程序的设计;
其实重点是上述的第二点,因为有太多的Linux指令都默认使用 vi 作为数据编辑的接口;
所以必须要学会 vi ,否则很多指令就无法操作了。
既然这么重要,那就学呗!(下文主要以 vim 为例)
在使用 vim 之前得先了解 vim 的三种模式(重点!)
注意:
该图中的一般模式对应上文所说的命令模式
该图中的指令列模式对应上文所说的末行模式
/*
将下列配置代码写进vimrc中
命令行:vim ~/.vimrc
*/
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
inoremap {
{
}<ESC>i
inoremap < <><ESC>i
inoremap ' ''<ESC>i
inoremap " ""<ESC>i
set nu "设置显示行号
set autoindent "设置自动缩进(与上一行的缩进相同)
set smartindent "设置编程用的c自动缩进
set tabstop=4 "设置tab键的长度为4
set shiftwidth=4 "设置反向制表符中的空格数为4
set background=light "设置主题整体背景色调为:浅色
set mouse=a "打开鼠标
set showmatch "高亮显示{
},[],()的匹配情况
set cindent "设置编程用的c自动缩进
syntax on "开启语法高亮显示
""""""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""""
"新建.c,.h,.sh,.java文件,自动插入文件头
autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"
"定义函数SetTitle,自动插入文件头
func SetTitle()
"如果文件类型为.sh文件
if &filetype == 'sh'
call setline(1,"#########################################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: Song yang")
call append(line(".")+2, "\# mail: [email protected]")
call append(line(".")+3, "\# Created Time: "strftime("%c"))
call append(line(".")+4,"#########################################")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1,"/************************************************")
call append(line("."), " > File Name: ".expand("%"))
call append(line(".")+1, " > Author: Song yang")
call append(line(".")+2, " > Mail: [email protected]")
call append(line(".")+3, " > Created Time: ".strftime("%c"))
call append(line(".")+4, "************************************************/")
call append(line(".")+5, "")
endif
if &filetype == 'cpp'
call append(line(".")+6, "#include " )
call append(line(".")+7, "using namespace std;")
call append(line(".")+8, "")
call append(line(".")+9, "")
endif
if &filetype == 'c'
call append(line(".")+6, "#include " )
call append(line(".")+7, "#include " )
call append(line(".")+8, "#include " )
call append(line(".")+9, "#include " )
call append(line(".")+10, "#include " )
call append(line(".")+11, "")
call append(line(".")+12, "")
endif
if &filetype == 'h'
call append(line(".")+6, "")
endif
"新建文件后,自动定位到文件末尾"
endfunc
autocmd BufNewFile * normal G
上述配置文件是本人正在使用的,虽然不是特别的强大,但是比起什么也不配置也方便了许多,特别是一些括号的自我补全(在敲代码时真的能提升效率!!!)还有就是我比较喜欢的头文件的设置,就是每新建一个文件,会自动添加头部信息(包括文件名、作者、作者联系方式、文件创建时间等等),看着还是比较专业的。
【1】百度百科-Vi
【2】百度百科-Vim
【3】鸟哥 . 鸟哥的Linux私房菜[M] . 北京:人民邮电出版社,2010:第十章
【4】么滴感情de杀手 . vi和vim的介绍 . CSDN . 2019 . 04 . 18