Linux Vim 编辑器的使用


分类: Linux
评论: 1

Linux Vim 编辑器的使用



分类: Linux
评论: 1

概述

Linux 由于是命令界面使用居多,不像 Windows 系统有桌面操作窗口,鼠标动动就能打开一些编辑软件对文件进行编辑。

在 Linux 系统中,虽然不能通过鼠标来操作,但是通过命令的方式,可以更加灵活的处理文件编辑操作,比鼠标操作具备更高效率。

常用的几个编辑程序:

Vim 编辑器需要另外安装,不是系统自带的软件,系统自带的软件是 Vi。

Vim 命令语法

vim [arguments] [file ..]       编辑指定文件
vim [arguments] -               标准输入
vim [arguments] -t tag          编辑定义标记的文件
vim [arguments] -q [errorfile]  编辑第一个错误的文件

命令选项

+#           打开文件,并将光标位于 # 行的行首,# 是一个行号
+/pattern    打开文件,并将光标位于 pattern 第一个匹配行的行首
-b file      二进制方式打开文件
-d file1 file2 [......]      比较多个文件,相当于 vimdiff
-m file      只读方式打开文件
-e file      直接进入 ex 行编辑模式,相当于执行 ex file
-y file

使用 Vim 命令编辑文件,若是该文件存在则打开编辑,若是不存在,在编辑保存之后则为该名称创建新文件。

Vim 工作模式

vim 编辑器一共有 6 中工作模式,不同的模式可以使用特定的操作。

vim 默认进入普通模式。

普通模式

该模式是默认模式,并且切换模式要退回普通模式才能切换。

该模式下可以进行查看,移动光标,复制,删除,粘贴(不完全)

并且可以使用普通模式允许的快捷命令,该命令与命令行模式不同。

其他模式切换普通模式: ESC

常用快捷命令

以下命令中 # 表示数值的意思。

命令说明
光标、视图移动命令
ZZ保存退出
ZQ不保存退出
h、l、j、k#command字符光标移动,分别是:左、右、下、上,同样可以使用键盘方向键#表示移动多少个字符,直接按数值,紧着按方向就行
w、e、b#command单词移动,分别表示:下一个单词的词尾;当前、下一个单词的词尾;当前、前一个单词的词首#表示一次移动多少个单词
H、M、L页首、页中、页尾
zt、zz、zb视图移动,分别将当前行视图移动到:顶端、中部、尾部
^、0、$光标移动,分别将光标移动到:非空行首、行首、行尾
#G、G、gg光标行间移动,分别是:#跳转多少行、最后一行、第一行
()、{}光标在句、段落移动
Ctrl + f、b、d、u视图翻屏,分别将视图翻:向下一屏、向上一屏、向下半屏、向上半屏
增删改查操作
x、#x删除光标处字符,删除 # 光标位置起始多少个字符
xp交换光标所处字符与后一个字符位置
~大小写转换
J删除光标所在行换行符,用空格替换
r、R替换光标所在字符、进入替换模式
d、d$D、d^、d0、dw、db、de、#command
dd、#dd剪切当前行、多行剪切
y、y$、y0、y^、ye、yw、yb、#command复制字符
yy、#yy、Y复制行
p粘贴在行下方或光标后面
P粘贴在行上方或光标前面
c、c$、c^、c0、cb、cw、ce、#command删除字符
cc、#cc、C删除行
/pattern、?pattern查找
n、N命令同方向、命令反方向
u、#u、U撤销最近更改、撤销之前多少次更改、撤销光标所在行所有更改
Ctrl + r回退撤销
.、#.重复前一个操作、重复前一个 # 次操作

高级用法

<start position><command><end position>

常见命令:y 复制,d 删除,gU 变大写,gu 变小写

范例:

0y$ # 从行首复制到 $ 行尾

在普通模式下,连续输入,可以重复执行命令:

100ifu [ESC]

普通模式输入 100,然后 i 进入插入模式完成编辑之后,ESC 退回普通模式,后续 Vim 自动对输入的内容连续复制 99 次。

组合命令:

di" #  "若是光标在双引号里面,则删除里面的内容",其他的成对符号都一样
yi" # "若是光标在双引号里面,则复制里面的内容",其他的成对符号都一样
vi" # "若是光标在双引号里面,则选中里面的内容",其他的成对符号都一样
dtx # 删除字符,直到光标遇到第一个 x 字符,x 是可变的
ytx # 复制字符,直到光标遇到第一个 x 字符,x 是可变的
vtx # 选中字符,直到光标遇到第一个 x 字符,x 是可变的

插入模式

顾名思义,该模式可以对文件内容进行修改。

普通模式进入编辑模式:

命令说明
i在当前光标处进行编辑
I在行首插入
A在行末插入
a在光标后插入编辑
o在当前行后插入一个新行
O在当前行前插入一个新行
cw替换从光标所在位置后到一个单词结尾的字符

可视化模式

这个模式与普通模式比较相似,但是移动命令会扩大高亮的文本区域,高亮区域可以是字符、行或者是一块文本。

当执行一个非移动命令时,命令会作用到这块高亮的区域上。

Vim 的文本对象也能和移动命令一样用在这个模式中。

进入该模式

命令说明
v以字符为单位进行选择
V以行为单位进行选择
Ctrl + v面向块选中区域

进入可视化模式,可以搭配使用命令来灵活选中。

例如,进入视图模式,复制 10 行

V
10G
y

命令行模式

在命令行模式中可以输入会被解释成并执行的文本。

在命令执行之后,Vim 返回到命令行模式之前的模式,通常是普通模式。

常用命令

w                写(存)磁盘文件
wq               写入并退出
x                写入并退出
X                加密
q                退出
q!               不存盘退出,即使更改都将丢失
r filename       读文件内容到当前文件中
w filename       将当前文件内容写入另一个文件
!command         执行命令
r!command        读入命令的输出

地址界定

格式

:start_pos,end_pos CMD

用法

以下用法是在 : 进行。

命令说明
#具体第 # 行,例如 2 表示第 2 行
#,#从左侧#表示起始行,到右侧#表示结尾行
#,+#从左侧#表示的起始行,加上右侧#表示的行数,范例:2,+3 表示2到5行
.当前行
$最后一行
.,$-1当前行到倒数第二行
%全文, 相当于
1,$/pattern/从当前行向下查找,直到匹配pattern的第一行,即:正则表达式
/pat1/,/pat2/从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束
#,/pat/从指定行开始,一直找到第一个匹配patttern的行结束
/pat/,$向下找到第一个匹配patttern的行到整个文件的结尾的所有行

查找并替换

:s/要查找的内容/替换为的内容/修饰符

说明

修饰符

i    #忽略大小写
g    #全局替换,默认情况下,每一行只替换第一次出现
gc    #全局替换,每次替换前询问

分隔符

替换模式可以使用不同分隔符来适应不同情况。

例如,找到替换内容包含 / 符号,那么通常的 / 符号就是用当前情况的,需要使用其他符号来作为分隔符号。

s#/etc#/home#gc
s:/etc:/home:gc
s&/etc&/homegc

替换模式

这个模式和无模式编辑器的行为比较相似(Windows标准文本控件的方式)。

这个模式中,可以用鼠标或者光标键高亮选择文本,不过输入任何字符的话,Vim 会用这个字符替换选择的高亮文本块,并且自动进入插入模式。

退出 Vim

以下操作均在命令行模式下。

命令说明
:q!强制退出,不保存
:q退出
:wq!强制保存并退出
:w <文件路径>另存为
:saveas 文件路径另存为
:x保存并退出
:wq保存并退出

普通模式下退出 Vim:**Shift + zz**** **

Vim 配置

以下命令在 Vim 命令行模式下有效,但仅限当前 Shell 进程。

除了这种方式之外,还可以将其写入配置文件,实现持久化配置 Vim。

该配置有全局与个人:

/etc/vimrc          #全局
~/.vimrc            #个人

常用配置

配置说明
set number、set nu显示行号
set nonumber、set nonu不显示行号
set ignorecase、set ic忽略大小写
set noic不忽略大小写
set autoindent、set ai启用自动缩进
set noai关闭自动缩进
set paste启用粘贴保留格式
set nopaste关闭粘贴保留格式
set list显示 Tab 和换行符:^I、$
set nolist不显示 Tab 和换行符:^I、$
set hlsearch高亮搜索
set nohlsearch非高亮搜索
syntax on语法高亮
syntax off非语法高亮
set fileformat=dosset fileformat=unixset ff=dosunix
set expandtabset et使用空格替换 Tab,默认 8 个空格替换一个 Tab
set noexpandtab关闭空格替换 Tab
set tabstop=#set ts=#开启替换 Tab 选项之后,可以指定 # 个空格替换 Tab
set textwidth=#set wrapmargin=#设置文本宽度
set cursorlineset cul显示光标所在行标识线
set nocursorline不显示光标所在行标识线
set key=password加密文件,password 是密码
set key=解除文件加密,不加密码就是解除
help option-listsetset all查看帮助

多个文件模式

命令操作

vim file1 file2 [file3......]

:next # 下一个文件
:prev # 上一个文件
:first # 第一个文件
:last # 最后一个文件
:wall # 保存所有文件
:qall # 退出所有文件
:wqall # 保存并退出所有文件

多窗口模式

快捷操作

Ctrl + w,Arrow # 窗口切换

多文件分割窗口

# -o 上下分割
# -O 左右分割
vim -o | -O file1 file2 [file3......] #

单个文件分割窗口

Ctrl + w,s # split, 上下分屏
Ctrl + w,v # vertical,左右分割
Ctrl + w,q # 取消相邻窗口
Ctrl + w,o # 取消全部窗口
:wqall # 全部退出

寄存器

普通模式下,使用按键

"寄存器<命令> # 2"tyy 复制三行到 t 寄存器

寄存器类型

26 个字母寄存器
1 个无名寄存器
0-9 共 10 个数字寄存器

没有指定就使用无名寄存器。

字母寄存器可以会话共享,数字寄存器无法共享。

0 存放景近复制内容,1存放最近删除内容。

当新的文本变更和删除时,1 转存到 2,2 转存到 3,以此类推。

标记和宏

ma 将当前位置标记为a, 26个字母均可做标记,mb、mc等等
'a 跳转到a标记的位置,实用的文档内标记方法,文档中跳跃编辑时很有用
qa 录制宏a,a为宏的名称,未行提示: recording@a
q 停止录制宏
@a 执行宏a
@@ 重新执行上次执行的宏

编辑二进制模式

vim -b binaryfile

:%!xxd # 转为 16 进制
:%!xxd -r # 转回原文本

帮助

:help
:help topic
:help doc-file-list
:help syntax

vimtutor # 进入编辑帮助模式