Vim文本编辑器
Vim编辑器简介
vi编辑器是Unix系统最初的编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。尽管它可能是世界上最复杂的编辑器(至少讨厌它的人是这么认为的),但其拥有的大量特性使其成为Unix系统管理员多年来的支柱性工具。
在GNU项目将vi编辑器移植到开源世界时,他们决定对其作一些改进。由于它不再是以前Unix中的那个原始的vi编辑器了,开发人员也就将他重命名为vi improved, 或vim。
vim是vi的升级版,最常见的区别是能用多种颜色显示显示系统文件的一些特殊信息。
-
vi: Visual Interface 文本编辑器,可视化接口
-
vim:vi iMproved的缩写,即vi的增强版
Vim模式
Vim参数
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled May 8 2021 05:44:12)
用法: vim [参数] [文件 ..] 编辑指定的文件
或: vim [参数] - 从标准输入(stdin)读取文本
或: vim [参数] -t tag 编辑 tag 定义处的文件
或: vim [参数] -q [errorfile] 编辑第一个出错处的文件
参数:
-- 在这以后只有文件名
-v Vi 模式 (同 "vi")
-e Ex 模式 (同 "ex")
-s 安静(批处理)模式 (只能与 "ex" 一起使用)
-d Diff 模式 (同 "vimdiff")
-y 容易模式 (同 "evim",无模式)
-R 只读模式 (同 "view")
-Z 限制模式 (同 "rvim")
-m 不可修改(写入文件)
-M 文本不可修改
-b 二进制模式
-l Lisp 模式
-C 兼容传统的 Vi: 'compatible'
-N 不完全兼容传统的 Vi: 'nocompatible'
-V[N][fname] Be verbose [level N] [log messages to fname]
-D 调试模式
-n 不使用交换文件,只使用内存
-r 列出交换文件并退出
-r (跟文件名) 恢复崩溃的会话
-L 同 -r
-A 以 Arabic 模式启动
-H 以 Hebrew 模式启动
-F 以 Farsi 模式启动
-T <terminal> 设定终端类型为 <terminal>
-u <vimrc> 使用 <vimrc> 替代任何 .vimrc
--noplugin 不加载 plugin 脚本
-P[N] 打开 N 个标签页 (默认值: 每个文件一个)
-o[N] 打开 N 个窗口 (默认值: 每个文件一个)
-O[N] 同 -o 但垂直分割
+ 启动后跳到文件末尾
+<lnum> 启动后跳到第 <lnum> 行
--cmd <command> 加载任何 vimrc 文件前执行 <command>
-c <command> 加载第一个文件后执行 <command>
-S <session> 加载第一个文件后执行文件 <session>
-s <scriptin> 从文件 <scriptin> 读入正常模式的命令
-w <scriptout> 将所有输入的命令追加到文件 <scriptout>
-W <scriptout> 将所有输入的命令写入到文件 <scriptout>
-x 编辑加密的文件
--startuptime <file> Write startup timing messages to <file>
-i <viminfo> 使用 <viminfo> 取代 .viminfo
-h 或 --help 打印帮助(本信息)并退出
--version 打印版本信息并退出
Vim打开文件的用法
命令 | 用途 |
---|---|
vim file | 打开文件file |
vim +# file | 打开file文件,光标定位在file文件的第#行 |
vim + file | 打开file文件,光标定位在最后一行 |
vim +/PATTERN file | 打开file文件,定位第一次被PATTERN(模式)匹配到的行的行首 |
Vim编辑器模式,主要分为一下三类:
- 命令模式(编辑模式):默认模式,移动光标,剪切/粘贴文本(界面表现:左下角显示文件名或为空)
- 插入模式(输入模式):修改文本(界面表现:左下角显示—INSERT–)插入模式下,按ESC按键返回命令模式
- 末行模式(扩展模式):保存、退出等(界面表现:左下角显示—VISUAL–)末行模式下连续按两次ESC按键返回末行模式
Ps : Esc键可以退出当前模式
1. 命令模式
当刚打开要编辑的文件或新建一个文件时,vim首先进入的是命令模式。在命令模式中,vim会将按键解释程命令。
命令模式下常用快捷键
1)模式转换
快捷键 | 用途 |
---|---|
i | 在当前光标所在字符的前面,转为插入模式 |
a | 在当前光标所在字符的后面,转为插入模式 |
o | 在当前光标所在行的下方,新建一行,并转换为插入模式 |
I | 在当前光标所在行的行首,转换为插入模式 |
A | 在当前光标所在行的行尾,转换为插入模式 |
O | 在当前光标所在行的上方,新建一行,并转换为插入模式 |
cc | 删除当前行并输入新内容,相当于S |
C | 删除当前光标到行尾,并切换成插入模式 |
c^ | 删除光标处到行首的字符,并进入插入模式 |
c$ | 删除光标处到行尾的字符,并进入插入模式 |
c0 | 删除光标处到当前行首的第一非空字符,并进入插入模式 |
cb | 删除当前第一个单词,并进入插入模式 |
ce | 删除下一个单词,并进入插入模式 |
cw | 删除光标处到单词词尾,并进入插入模式 |
2)光标移动
快捷键 | 用途 |
---|---|
h[#h] | 左移一个字符[左移#个字符] |
l[#l] | 右移一个字符[右移#个字符] |
k[#k] | 上移一行(文本的上一行)[上移#个字符] |
j[#j] | 下移一行(文本的下一行)[下移#个字符] |
g | 移到缓冲区最后一行 |
# g | 移到缓冲区第#行 |
gg | 移到缓冲区第一行 |
H | 跳转当前页的页首 |
M | 跳转当前页的中间行 |
L | 跳转当前页的页底 |
w[#w] | 移动至下一个单词的词首 |
e[#e] | 跳至当前或下一个单词的词尾 |
b[#b] | 跳至当前或前一个单词的词首 |
0(零) | 绝对行首,光标移动到当前行的行首 |
^ | 光标移动到当前行首的第一个非空白字符 |
& | 光标移动到当前行的行尾 |
PageDown(或Ctrl+F) | 下翻一屏 |
PageUp(或Ctrl+B) | 上翻一屏 |
Ctrl + e | 向下滚动一行 |
Ctrl + y | 向上滚动一行 |
Ctrl + d | 向下滚动半屏 |
Ctrl + u | 向上滚动半屏 |
3)数据编辑
- 删除命令
命令 | 描述 |
---|---|
x[#x] | 删除当前光标所在位置的字符[删除从光标开始处向后#个字符] |
dd | 删除光标所在的行 |
dw | 删除当前光标所在的单词 |
d$ | 删除当前光标所在位置至行尾的内容 |
J | 删除当前光标所在行行尾的换行符(拼接符) |
d^ | 删除到非空行首 |
d0 | 删除到行首 |
A | 在当前光标所在行尾追加数据 |
- 替换命令
命令 | 描述 |
---|---|
r char | 用char替换当前光标所在位置的单个字符 |
R text | 用text覆盖当前光标所在位置的数据,知道按下ESC键 |
- 复制与粘贴命令
命令 | 描述 |
---|---|
y[#yy] | 复制,可以结合光标跳转字符,实现范围复制(行为与d有类似之处) |
y$ | 复制到行尾 |
y^ | 复制到非空行首 |
y0 | 复制到行首 |
yy | 复制当前行 |
Y | 整行复制 |
p | 缓冲区存的如果为整行,则粘贴当前光标所在行的下方,否则粘贴至当前光标所在处的后面 |
- **撤销命令-**u[#u]:撤销最近的更改(撤销之前#次更改)
4)查找与替换
- 查找
在vim中可以通过按下斜线(/)键。
光标会跑到消息航,然后vim会显示出斜线,然后输入需要查找的关键字符,按下回车键,vim会在文本中查找要查找的文本。
通常会出现三种回应:
- 如果要查找的文本出现在光标当前位置之后,则光标会跳转到该文本出现的第一个位置。
- 如果要查找的文本未在光标当前位置之后出现,而且在之前出现,则光标会跳过文件末尾,出现在该文本所在的第一个位置(并用一条消息指明)
- 输出一条错误消息,说明在文件中没有找到要查找的文本。
- 如果要继续查找同一个单词,按下斜线,然后按回车,接着使用n键,表示下一个(next).
- 替换
替换命令允许你快速的用一个单词来替换文本中的另一个单词。
必须进入底行模式才能使用替换命令。
:s/old/new
Vim会跳到old第一次出现的地方,并用new来替换。
对这个命令进行一些修改可以替换多处文本:
:s/old/new/g # 可以替换掉第一行出现的所有old,替换成new.
:n,ms/old/new/g # 替换行号n和m之间的所有old
:%s/old/new/g # 替换整个文件中的所有old 最常用到
:%s/old/new/gc # 替换整个文件中的所有old,但在每次出现时提示。
修饰符:
- i:忽略大小写
- g:管局替换;默认情况下,每行只替换第一次出现
- gc:全局替换,每次替换前询问
2.末行模式
命令模式下进入末行模式(扩展模式)输入::
退出缓存区的命令如下:
-
:q
如果未修改缓冲区数据,退出。 -
:q!
取消所有对缓冲区数据的修改并退出。 -
:w
filename 将文件保存到另一个文件中。 -
:wq
将缓冲区数据保存到文件中并退出
Vim编辑器配置
选项或配置均位于用户主目录中的 Vim
启动配置文件 .vimrc
。 按照下面的说明在 .vimrc
中设置选项:
(注意:vimrc
文件也用于 Linux
中的全局配置,如 /etc/vimrc
或 /etc/vim/vimrc
。本文所说的 .vimrc
均是指位于用户主目录中的 .vimrc
文件。)
在Linux 系统中:
- 用
Vim
打开.vimrc
文件:vim ~/.vimrc
- 复制本文最后的
选项列表
粘贴到.vimrc
文件 - 保存并关闭 (
:wq
)
在Windows 系统中:
- 首先,安装 gvim
- 打开
gvim
- 单击 “编辑” -> “启动设置”,打开
_vimrc
文件 - 复制本文最后的 “选项列表” 粘贴到
_vimrc
文件 - 单击 “文件” -> “保存”
Vim编辑器的配置主要包括以下几类:
- 缩进 & 制表符
- 显示 & 格式化
- 搜索
- 浏览 & 滚动
- 拼写
- 其他选项
缩进 & 制表符
-
使
Vim
在创建新行的时候使用与上一行同样的缩进:set autoindent
-
创建新行时使用智能缩进,主要用于
C
语言一类的程序。通常,打开smartindent
时也应该打开autoindent
:set smartindent
-
设置文件里的制表符
(TAB)
的宽度(以空格的数量表示):set tabstop=4
-
设置移位操作
>>
或<<
的缩进长度(以空格的数量表示):set shiftwidth=4
-
如果你更喜欢在编辑文件时使用空格而不是制表符,设置以下选项可以使
Vim
在你按下Tab
键时用空格代替制表符:set expandtab
显示 & 格式化
- 要在每行的前面显示行号:
set number
- 要在文本行超过一定长度时自动换行:
set textwidth=80
- 要根据从窗口右侧向左数的列数来自动换行:
set wrapmargin=2
- 当光标遍历文件时经过括号时,高亮标识匹配的括号:
set showmatch
搜索
- 高亮搜索内容的所有匹配位置:
set hlsearch
- 搜索过程中动态显示匹配内容:
set incsearch
- 搜索时忽略大小写:
set ignorecase
- 在打开
ignorecase
选项的条件下,搜索内容包含部分大写字符时,要使搜索大小写敏感:set smartcase
浏览 & 滚动
- 为获得更好的视觉体验,你可能希望将光标放在窗口中间而不是第一行,以下选项使光标距窗口上下保留 5 行:
set scrolloff=5
- 在
Vim
窗口底部显示一个永久状态栏,可以显示文件名、行号和列号等内容:set laststatus=2
拼写
Vim
有一个内置的拼写检查器,对于文本编辑和编码非常有用。Vim
可以识别文件类型并仅对代码中的注释进行拼写检查。使用下面的选项打开英语拼写检查:set spell spelllang=en_us
其他选项
- 禁止创建备份文件:启用此选项后,
Vim
将在覆盖文件前创建一个备份,文件成功写入后保留该备份。如果不想保留该备份文件,可以按下面的方式关闭:set nobackup
- 禁止创建交换文件:启用此选项后,
Vim
将在编辑该文件时创建一个交换文件。 交换文件用于在崩溃或发生使用冲突时恢复文件。交换文件是以.
开头并以.swp
结尾的隐藏文件:set noswapfile
- 如果需要在同一个
Vim
窗口中编辑多个文件并进行切换。默认情况下,工作目录是打开的第一个文件的目录。而将工作目录自动切换到正在编辑的文件的目录是非常有用的。要自动切换工作目录:set autochdir
Vim
自动维护编辑的历史记录,允许撤消更改。默认情况下,该历史记录仅在文件关闭之前有效。Vim
包含一个增强功能,使得即使在文件关闭后也可以维护撤消历史记录,这意味着即使在保存、关闭和重新打开文件后,也可以撤消之前的更改。历史记录文件是使用.un~
扩展名保存的隐藏文件:set undofile
- 错误信息响铃,只对错误信息起作用:
set errorbells
- 如果你愿意,还可以设置错误视觉提示:
set visualbell
以下为配置好的配置文件信息:
" Indentation & Tabs
set autoindent #采用与上一行相同的缩进
set smartindent # 智能缩进
set tabstop=4 # 制表符宽度为4
set shiftwidth=4 # 移位操作的缩进长度为4
set expandtab # 将tab键的tab缩进换为空格
set smarttab
" Display & format
set number # 在每行之前添加行号
set textwidth=80 # 文本超过80就自动换行
set wrapmargin=2 # 从窗口右侧向左数的列数为2时,自动换行
set showmatch # 高亮标识匹配括号
" Search
set hlsearch # 高亮搜索内容的所有匹配位置
set incsearch # 搜索过程中动态显示匹配内容
set ignorecase # 搜索时忽略大小写
set smartcase # 搜索内容包含部分大写字符时,使搜索大小写敏感
" Browse & Scroll
set scrolloff=5 # 光标距窗口上5行
set laststatus=2 # 底部永久状态栏
" Spell
set spell spelllang=en_us # 英语拼写检查
" Miscellaneous
set nobackup # 不保留备份文件
set noswapfile
set autochdir # 要自动切换工作目录
set undofile
set visualbell # 设置错误视觉提示
set errorbells # 错误信息响铃