先说目的和背景
今天配置服务器的时候,使用Linux编辑配置文件的时候,发现Vim编辑器各种不熟练。经常发现“卧槽,这个怎么没了?”“这个怎么编辑不了?”“这个怎么退出?”,突然觉得对于一个经常使用的操作系统,连个编辑器都使用不熟练。这还怎么成为高手呢。于是专门回头学习了一下Linux中的Vim的使用。大家都知道,Vim是强大的编辑器,从功能来讲Vim不输任何的编辑器。Vim作为Linux中的编辑器,并不等同于Windows中的NotePad。相比于Vim来说,Windows的记事本就是个渣渣。之前学习Linux的时候也学习过Vim的使用。但是不系统也不成体系。我认识到这样不能够完全掌握Linux。更别说精通了。所以建立了这样的一个文集来专门学习一下Linux的各方面知识。不止是Vim,在今后的码路上遇到任何关于Linux中的不熟练或者不明白的地方。都要系统性的回顾一下。所谓“温故而知新”。
Vi
VI:Visual Interface
模式
Vim的模式分为:
- 编辑模式(命令模式)
在刚开始进入Vim是处于的模式就是编辑模式,在编辑模式中输入的任何字符都会作为命令 - 输入模式
在输入模式中,所有输入的字符都作为内容 - 末行模式
在编辑模式中通过 :可以进入末行模式,末行模式可以执行一些特定的功能
模式的转换
编辑模式--->输入模式
- i: 在当前光标所在字符的前面,转为输入模式
- a: 在当前光标所在字符的后面,转为输入模式
- o:在当前光标所在行的下方,新建一行,并转为输入模式
- I 在当前光标所在行的行首,转换为输入模式
- A 在当前光标所在行的行尾,转换为输入模式
- O 在当前光标所在行的上方,新建一行,并转为输入模式
输入模式--->编辑模式
- ESC 键转为编辑模式
编辑模式---> 末行模式
- :
末行模式--->编辑模式 - ESC
打开文件
- vim+#:打开文件,并定位于第#行
vim +5 /etc/hosts 打开hosts文件并编辑第5行
- vim + 打开文件,定位至最后一行
vim + profile 打开文件并编辑最后一行
- vim + /PATTERN:打开文件,定位至第一次被PATTERN匹配到的行的行首
vim +/PATH profile 打开文件并定位到关键词PATH第一次出现的行的行首
n:定位下一个关键字位置
N:定位上一个关键字的位置
关闭文件
末行模式下关闭文件
- :q 退出
- :wq 保存并退出
- :q! 不保存并退出
- :w 保存
- :w! 强行保存
- :wq -->:x
编辑模式下退出
- ZZ:保存并退出
移动光标
编辑模式
逐字符移动
- h:左
- l: 右
- j: 下
- k: 上
- #h 移动#个字符
以单词为单位移动
- w:移动到下一个单词的词首
- e:挑至当前或下一个单词的词尾
- b:跳至当前或前一个单词的词首
行内跳转
- 0:绝对行首
- ^:行首的第一个非空白字符
- $:绝对行尾
行间跳转
- #G:跳转至第#行
- G最后一行
在末行模式下,直接给出行号即可
翻屏
- ctrl+f 向下翻屏
- ctrl+b 向上翻屏
- ctrl+d 向下翻半屏
- ctrl+u 向上翻半屏
删除单个字符
- x:删除光标所在处的单个字符
- #x:删除光标所在处及向后的共#个字符
删除命令
- d命令跟跳转命令组合使用
- dd 删除当前光标所在行
- #dd:删除包括当前光标所在行内的#行
- 末行模式下
StartADD,EndADDdr
.:表示当前行
$:最后一行
+#:向下的#行
-#:向上的#行
.,.+3d 删除当前光标所在行到之后的3行,包括光标所在行
.,$-1d 删除除去最后一行的所有内容
复制命令 y
用法和d相同
- 编辑模式
3y 复制光标所在的行后的3行
粘贴命令 p
p:如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面
P:如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面
查找命令
- 末行模式下
/PATTERN 向下查找
?PATTERN 向上查找
* n 前一个
* N后一个
替换 r
R:进入替换模式
查找并替换
- 末行模式
在末行模式下使用S命令uu - 语法规则
ADDR1,ADDR2s@PATTERN@string@gi 从第几行到第几行@s表达式@要替换的字符@g(全部替换)i(忽略大小写) - % 表示全文
- ^ 第一行
- $ 最后一行
* 将文本中的所有after替换为before
:1,$s@after@before@g 第一行开始到最后一行替换@after@before@全部替换
撤销命令 u
- u:撤销前一次的编辑操作
* 连续u命令可撤销此前的n次编辑操作
* #u 直接撤销最近#次编辑操作
撤销最近一次撤销操作 ctrl+r
编辑多个文件
语法格式:vim FILE1 FILE2 FILE3
- :next 切换至下一个文件
- :prev 切换至前一个文件
- :last 切换至最后一个文件
- :first 切换至第一个文件
- 退出
- :qa 全部退出
分屏显示一个文件
- Ctrl+w,s:水平拆分窗口
- Ctrl+w,v:垂直拆分窗口
- Ctrl+w,ARROW 在窗口之间切换光标
: qa 关闭所有窗口
分窗口编辑多个文件
- vim -o:水平分割显示
- vim -O:垂直分割显示
将当前文件中部分内容另存为另外一个文件
- 末行模式下
:w - 语法格式
:ADDR1,ADDR2w /path/to/somewhere
将另外一个文件的内容填充到当前文件中
:r /path/to/somefile
跟shell交互
在正在编辑文件的时候可能需要执行一些外部的命令,比如:正在编辑文件时想要在外部目录创建一个文件
:!COMMAND
显示行号
末行模式下
- set number 显示行号
- set nu 显示行号
- set nonu 不显示行号
但是显示行号仅限本次操作,如果需要在编辑时默认显示行号,需要修改vi的配置文件
* vi 配置文件路径
vi /etc/virc
将virc文件中添加
set nu
保存退出
这样默认就会显示行号
忽略或区分大小写
末行模式
- set ignorecase
- setic
- set noic 取消显示
设定自动缩进
- set autoindent
- set ai
- set noai 取消自动缩进
查找到的文本高亮显示或取消
- :set hlsearch
- :set nohlsearch
语法高亮
- :syntax on
- :syntax off
配置文件
- vi 配置文件
/etc/virc - vim配置文件
/etc/vimrc
Vim
在编辑方面Vi和Vim是基本相同的,但是Vim对于构建和编程方面具有更好的拓展性和支持,鉴于自己在Linux方面过于小白,先熟练了编辑功能再来学习Vim的强大