vim编译器简讲

202 阅读4分钟

vim的概念

Vim是从 vi 发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛 使用,和Emacs并列成为类Unix系统用户最喜欢的文本编辑器。

vim的设计理念是命令的组合。用户学习了各种各样的文本间移动/跳转的命令和其他的普通模式的编辑命令,并且能够 灵活组合使用的话,能够比那些没有模式的编辑器更加高效的进行文本编辑。同时VIM与很多快捷键设置和正则表达式类似,可以辅助记忆。并且vim针对程序员做了优化。

vim的作用

创建或修改文本文件

维护Linux系统中的各种配置文件

vi/vim编辑器的工作模式

命令模式

启动 vi/vim,便进入了命令模式。此状态下敲击键盘动作会被vim识别为命令,而非输入字符。 该模式中主要完成如光标移动、字符串查找,以及删除、复制、粘贴文件内容等相关操作。

输入模式

命令模式按下i, I, o, O, a, A, r, R等任何一个字母之后即可进入输入模式。可以对内容进行编辑。 处于输入模式时,vi编辑器的最后一行会出现“–INSERT–”的状态提示信息。 按Esc键可以回到命令模式。

末行模式

命令模式下,按 : (英文冒号)即进入末行模式。在此模式下,可进行读取、查找替换文件内容、保存文件、 退出编辑器等操作。

模式间的切换

命令模式—————(i)—————>输入模式

命令模式—————(:)—————>末行模式

输入模式—————(esc)—————>命令模式

末行模式—————(esc)—————>命令模式

命令模式

此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。

操作键功能
ctrl+f或者Pagedown向下翻页
ctrl+b或者Pageup向上翻页
Home;^;0跳到本行的行首
按 End 键或$跳转到本行的行尾
1G 或 gg跳转到文件的第一行包括空行
G跳转文件的末尾
#G#代表行号数字,直接跳转到#行
M跳转到当前显示页面的中间行
x或delete删除当前光标的字符
dd删除一整行
#dd删除当前光标开始到第#行(包括当前行)
d^删除当前光标之前到行首 往前不包括当前光标处的字符往后删除包括当前光标处的字符
d$删除当前光标到行尾
dw删除当前光标处的单词
R 或shift+r替换当前光标处文字,会进入替换模式
yy复制当前光标处整行
#yy复制当前光标处向下的#行
p粘贴到光标处下一行
P(大写)粘贴到光标处上一行
u只消除上一次可多次使用
U(大写)U 取消所有操作
/字符向下查找
?字符向上查找
n向同一方向重复上次的查找指令
N向相反方向重复上次的查找指定末行模式

输入模式

快捷键功能描述
i在光标前插入随后输入的文本,光标后的文本相应向右移动
I行首插入命令。=^i ,移动到第一个非空字符并进入插入模式
o在光标所在行的下面插入新的一行。光标停在空行首,等待输入文本
O在光标所在行的上面插入新的一行。光标停在空行的行首,等待输入文本
a在当前光标所在位置之后插入随后输入的文本
A行尾插入命令

末行命令模式

文件中的指定内容执行保存、查找或替换等操作

快捷键功能效果
:q退出不保存
:q!强制退出不保存
:w保存
:w新文件名另存为新文件
:wq 或 :zz 或 :x保存并退出
:e其他文件名(如果已修改需要加e!)打开新文件进行编辑
:r其他文件名在当前文件中读入其他文件内容
: [替换范围] s/旧内容/新内容[/g]将旧内容替换为新内容
:s /old/new替换当前行中的第一个old改为new
:s /old/new/g替换当前行中的所有old改为new(/@#都可做分隔符)
:#,# s/old/new/g#到#行所有old改为new
:% s/old/new/g%代表全文,全文替换所有old改为new
:$ s/AB/CD/g$表示最后一行,最后一行的AB替换为CD
:$-1 s/AB/CD/g$-1表示倒数第二行,倒数第二行进行替换
:# d删除 第#行
:#,# d删除#到#行
:#,# y复制三到6 行
:set nu (:set nonu取消设置)加行号 不显示行号
:set cul (:set nocul 取消设置)光标所在行有下划线(取消)
:set ai对齐 回车后和上一行对齐
:set all可以看所有的一些帮助
:set key=password加密码
:set key=空白取消密码
:set tabstop=4 (set ts=4)按tab键,一次为四个空格
:!< command>在vim内执行外部命令
:!ls按回车后会列出当前目录内容
:!hostname按回车后显示当前主机名
:!date按回车后显示当前日期
:1,3 co 10将第1~3行复制粘贴到第10行下方(co表示copy)
:1,3 m 10将第1~3行剪切到第10行下方(m表示move)
set nu显示行号