Linux - vi 和 vim

我们今天来聊一聊 vi 和 vim:
在这里插入图片描述

vi 和 vim 是什么?

首先 vi 和 vim 是一个文本编辑器
类似于Windows系统中的记事本,
也是Linux / Unix系统中标准的编辑器
在Linux和Unix系统的任何版本,
vi / vim编辑器都是完全相同的。

注意:

  • 文本编辑器 是用作编写普通文字的 应用软件,它与文档编辑器(或称文字处理器;例如Word)的不同之处在于它并非用于 桌面排版(例如文档格式处理)而是常用于编写程序的 源代码
  • 文本文件 是指以 ASCII 码方式(也称文本方式)存储的文件。

vi 和 vim 有何区别?

可以把 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呢?

文本编辑器辣么多,为啥一定要学好 vi / vim呢?
其实是有原因的!因为:

	· 所有的 Unix Like 系统都会内建 vi 文本编辑器,其他的文本编辑器不一定会存在;
	· 很多个别软件的编辑接口都会主动呼叫 vi(例如:crontab、visudo、edquoda);
	· vim 具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便了程序的设计;

其实重点是上述的第二点,因为有太多的Linux指令都默认使用 vi 作为数据编辑的接口;
所以必须要学会 vi ,否则很多指令就无法操作了。

既然这么重要,那就学呗!(下文主要以 vim 为例)
Linux - vi 和 vim_第1张图片
在使用 vim 之前得先了解 vim 的三种模式(重点!

vim 的三种模式(重点)

  • 命令模式
    • 在该模式下是不能对文本进行直接编辑的,可以输入快捷键进行一些操作(删除行、复制行、移动光标、粘贴等等)【是打开文件后默认进入的模式】
    • (1)光标移动
      Linux - vi 和 vim_第2张图片

    • (2)复制操作
      Linux - vi 和 vim_第3张图片

    • (3)剪切删除
      Linux - vi 和 vim_第4张图片

    • (4)撤销与恢复
      在这里插入图片描述

    • (5)扩展:光标的快速移动
      Linux - vi 和 vim_第5张图片

  • 编辑模式(输入模式)
    • 在该模式下可以对文件的内容进行编辑。
    • 进入方式
      Linux - vi 和 vim_第6张图片

  • 末行模式(尾行模式)
    • 可以再末行输入命令来对文件进行操作(搜索、替换、保存、退出、撤销、高亮等等)
    • (1)进入方式
      Linux - vi 和 vim_第7张图片

    • (2)常见操作-1
      Linux - vi 和 vim_第8张图片

    • (3)常见操作-2
      Linux - vi 和 vim_第9张图片

三种模式的相互关系

Linux - vi 和 vim_第10张图片

注意:
该图中的一般模式对应上文所说的命令模式
该图中的指令列模式对应上文所说的末行模式

最后让我们来看看如何配置一份好用的vim⑧!Linux - vi 和 vim_第11张图片

vim的配置(难点)

配置的方式Linux - vi 和 vim_第12张图片

/*
    将下列配置代码写进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

你可能感兴趣的:(名为Linux的副本,linux,vim)