最全文本编辑器VIM使用指南

vim,一个纯文本(纯文本信息,ASCII text)编辑器,Vi(Visual Interface) IMproved,是一个模式化的编辑器
>vim有自带的教程,也是linux的一个内置命令
~]# vimtutor

## 一、基本模式分类
1 编辑模式(命令模式)
2 输入模式(插入模式)
3 末行模式(vim内置的命令行接口)

## 二、模式转换
1 编辑模式 �C> 输入模式

快捷键 | 含义
――― | ――
i | insert,在光标所在处输入
a | append,在光标所在处后方输入
o | 在光标所在处下方新建一行并开始输入
I | 在光标所在行的行首输入
A | 在光标所在行的行尾输入
O | 在光标所在行的上方新建一行并开始输入

2 输入模式 �C> 编辑模式
键入ESC键即可

3 编辑模式 �C> 末行模式(命令行模式)
键入:即可

4 末行模式 �C> 编辑模式
键入ESC键即可

## 三、进入文件编辑界面
vim [options] [file ..]

动作 | 含义
―― | ――-
\(什么都不加) | 使用vim打开文件,并且默认将光标放在第一行行首上
+# | 打开文件后,直接让光标处于第#行的行首
+/PATTERN | 打开文件后,直接将光标处于第一个被PATTERN匹配到的行的行首

例如:
`~]# vim +10 /etc/rc.d/init.d/functions` # vim打开文件,并且将光标自动放在第10行行首
`~]# vim + /etc/rc.d/init.d/functions` # vim打开文件,并且将光标自动放在末行行首

## 四、关闭编辑的文件

快捷键 | 含义
――― | ――
ZZ | 保存并退出
:q | 退出,但不保存
:q! | 强制退出,丢弃做出的修改
:wq | 保存并退出
:w /path/to/somefile | 保存至指定文件中
| 保存并退出

## 五、光标的跳转
1 字符间跳转

快捷键 | 含义
――― | ――
h | 光标向左跳转一个字符
l | 光标向右跳转一个字符
j | 光标向下跳转一个字符
k | 光标向上跳转一个字符
Num | 与字符跳转快捷键一同使用,向指定方向跳转字符的个数,例如10h,向左跳转10个字符

2 单词间跳转

快捷键 | 含义
――― | ――
w | 跳转到下一个单词的词首
e | 跳转到当前或下一个单词的词尾
b | 跳转到当前或前一个单词的词首
Num | 与单词跳转快捷键一同使用,向指定方向跳转单词的个数,例如10w,向后跳转10个单词

3 行首行尾跳转

快捷键 | 含义
――― | ――
^ | 跳转至行首的第一个非空白字符
0 | 跳转至一行绝对的行首,Tab字符不算,如果行首有Tab键,则会跳到Tab键之后
$ | 跳转至一行的绝对的行尾
4 行间跳转

快捷键 | 含义
――― | ――
#G | 跳转至第#行的行首
1G或gg | 跳转至第一行行首
G | 跳转至末行行首

5 句间跳转

快捷键 | 含义
――― | ――
) | 跳转至下一句
( | 跳转至前一句
Num | 与句跳转快捷键一同使用,向指定方向跳转句的个数,例如10),向后跳转10句

6 段间跳转

快捷键 | 含义
――― | ――
} | 向后跳转一个段落
{ | 向前跳转一个段落
Num | 与段落跳转快捷键一同使用,向指定方向跳转的段落个数,例如2},向后跳转2个段落

## 六、翻屏操作

快捷键 | 含义
――― | ――
Ctrl+f | 向文件尾部翻一屏
Ctrl+b | 向文件首部翻一屏
Ctrl+d | 向文件尾部翻半屏
Ctrl+u | 向文件首部翻半屏
Enter | 向文件尾部逐行移动

##七、编辑命令
1 字符编辑

快捷键 | 含义
――― | ――
x | 删除光标所在处的字符
#x | 删除光标所在处起始的#个字符
xp | 交换光标所在处及其后面的字符的位置

2 替换命令

快捷键 | 含义
――― | ――
r | 替换光标所在处的字符

3 删除命令

快捷键 | 含义
――― | ――
d | 删除命令,可结合光标跳转字符,实现范围删除
d$ | 删除当前光标所在处至行尾的全部字符
d^ | 删除当前光标所在处至行首的全部字符
dw | 删除当前光标所在处至下一个单词的词首的字符,支持加数字
de | 删除当前光标所在处至下一个单词的词尾的字符,支持加数字
db | 删除当前光标所在处至前一个单词的词首的字符,支持加数字
dd | 删除光标所在行的整行,支持加数字
#dd | 删除光标所在行开始往下的#行字符

4 粘贴命令

快捷键 | 含义
――― | ――
p | 如果缓冲区中缓冲的是整行,则将缓冲区中的内容拷贝至当前光标所在行的下方;如果缓冲区中缓冲的不是整行,则将缓冲区中的内容拷贝至当前光标所在处的后方
P | 如果缓冲区中缓冲的是整行,则将缓冲区中的内容拷贝至当前光标所在行的上方;如果缓冲区中缓冲的不是整行,则将缓冲区中的内容拷贝至当前光标所在处的前方

5 复制命令(yank,y)

快捷键 | 含义
――― | ――
y | 复制命令,可结合光标跳转字符
y$ | 复制当前光标所在处至行尾的全部字符
y^ | 复制当前光标所在处至行首的全部字符
yw | 复制当前光标所在处至下一个单词的词首的字符,支持加数字
ye | 复制当前光标所在处至下一个单词的词尾的字符,支持加数字
yb | 复制当前光标所在处至前一个单词的词首的字符,支持加数字
yy | 复制光标所在行的整行,支持加数字
#yy | 复制光标所在行开始往下的#行字符

6 改变命令(change,c)
功能:编辑模式 �C> 输入模式,实现删除操作的同时进入输入模式

快捷键 | 含义
――― | ――
c | 删除并切换至输入的命令,可结合光标跳转字符
c$ | 删除当前光标所在处至行尾的全部字符,并转成输入模式
c^ | 删除当前光标所在处至行首的全部字符,并转成输入模式
cw | 删除当前光标所在处至下一个单词的词首的字符,并转成输入模式,支持加数字
ce | 删除当前光标所在处至下一个单词的词尾的字符,并转成输入模式,支持加数字
cb | 删除当前光标所在处至前一个单词的词首的字符,并转成输入模式,支持加数字
cc | 删除光标所在行的整行,并转成输入模式,支持加数字
#cc | 删除光标所在行开始往下的#行字符,并转成输入模式

## 八、其他命令
1 可视化模式
功能:像windows的文本编辑工具一样,可以通过鼠标进行范围选定,然后进行操作

快捷键 | 含义
――― | ――
v | 从光标所在字符开始,根据鼠标选定的范围,以字符为单位进行选择
V | 从光标所在行开始,根据鼠标所选定的范围,以行尾单位进行选择

> 注意:
可视化模式经常要结合编辑命令:d(删除)、c(删除并进入输入模式)、 y(复制)。

2 撤销操作 �C undo
功能:对之前进行的操作进行撤销,默认在没有进行手动强制保存之前,可以撤销之前的50个操作。

快捷键 | 含义
――― | ――
u | 逐次撤销之前的操作
#u | 一次撤销之前操作的#次操作

3 恢复此前的撤销

快捷键 | 含义
――― | ――
Ctrl+r | 恢复此前的撤销操作

4 重复此前的操作

快捷键 | 含义
――― | ――
. | 重复上一次执行的操作动作

## 九、末行模式
### 1 地址定界
:start_pos[,end_pos]

表现形式 | 含义
―――― | ――
# | 指定特定的第#行,例如,:5即第5行
. | 则表示光标当前所在行
$ | 表示最后一行,例如,:.,$-1表示从当前行到倒数第2行
% | 表示全文,相当于:1,$
m,n | 指定行范围,m为起始行,n为结束行,例如,:5,8即从第5行到第8行
m,+n | 指定行范围,左侧为起始行的编号,右侧为相对左侧行号的偏移量,例如,:5,+3即从第5行到第8行
/PATTERN/ | 从光标所在位置开始向后查找,找到第一个匹配PATTERN的行
/PATTERN/,$ | 从光标所在位置开始向后查找,找到所有匹配PATTERN的行
/PATTERN1/,/PATTERN2/ | 从光标所在位置开始向后查找,范围是从第一次被PATTERN1所匹配到的行开始,至第一次被PATTERN2所匹配到的行结束之间的内容

注意:
上述各种表现形式均可同编辑命令一同使用,实现编辑操作:

操作 | 含义
―― | ――
d | 将框定范围内的文本删除
y | 将框定范围内的文本复制
c | 将框定范围内的文本修改,也就是删除后立即进入输入模式
w /path/to/somefile | 将框定范围内的文本保存至某指定文件
r /path/from/somefile | 将指定的文件中的文本读取并插入至框定位置

### 2 查找功能

表现形式 | 含义
―――― | ――
/PATTERN | 从光标当前所在处向文件尾部查找能够被当前模式匹配到的所有字符串;其中,n(下一个匹配的位置,与命令方向相同)、N(上一个匹配的位置,与命令方向相反)
?PATTERN | 从光标当前所在处向文件首部查找能够被当前模式匹配到的所有字符串;其中,n(下一
个匹配的位置,与命令方向相同)、N(上一个匹配的位置,与命令方向相反)

### 3 查找并替换

**功能**:查找匹配到的内容,并替换为想替换的内容,默认仅替换每一行中第一次匹配到的内容
**格式**:s/要查找的内容/替换为的内容/修饰符
> 注意:
查找并替换模式使用”/”来做为每个部分的分隔符,但是如果某一部分中的字符中也出现了”/”,可以把分隔符替换为其他非常用字符,比如#、@等,使之变成:
s#要查找的内容#替换为的内容#修饰符
s@要查找的内容@替换为的内容@修饰符

其中,
**要查找的内容**:可使用正则表达式;
**替换为的内容**:不能使用正则表达式,但可以引用,例如: \1,\2的分组引用
> 如果“要查找的内容”部分在模式中使用分组符号,在“替换为的内容”中使用后向引用匹配到的内容;
如果“要查找的内容”部分在模式中没有使用分组符号,在“替换为的内容”中则直接引用查找模式匹配到的全部文本,要使用&符号;

**修饰符**:

修饰符 | 含义
――― | ――-
i | 查找时忽略大小写
g | 全局替换,意味着一行中如果匹配到多次,则均替换;

**示例**:

表现形式 | 含义
―――― | ――
:%s/this/This/ | 从全局搜索this字串,并把每一行中第一次匹配到的字串替换为This
:%s/this/This/g | 从全局搜索this字串,并把每一个匹配到的字串都替换为This
:%s/this/This/gi | 从全局搜索this字串,并且在查找时忽略字符大小写,并把每一个匹配到的字串都替换为This
:%s/\\/cgroup\\/systemd/\\/etc\\/sysconfig/g | 从全局查找/cgroup/systemd字串,并把每一个匹配到的字串都替换为/etc/sysconfig,其中的代表路径的”/”需要加转义符”\\”
:%s@/cgroup/systemd@/etc/sysconfig@g | 从全局查找/cgroup/systemd字串,并把每一个匹配到的字串都替换为/etc/sysconfig
:%s@\\<t\\([[:alpha:]]\\+\\)\\>@T\\1@g | 从全局搜索以t开头的单词,并把所有匹配到的单词的t全部替换为T
:%s@\\t[[:alpha:]]\\+\\>@&er@g | 从全局搜索以t开头的单词,并把所有匹配到的单词后全部加上er

**练习题**:
(1) 复制/etc/grub2.cfg文件至/tmp目录中,用查找替换命令删除/tmp/grub2.cfg文件中以空白字符开头的行的行首的空白字符;
“`
~]# cp /etc/grub2.cfg /tmp/
~]# vim /tmp/grub2.cfg
末行模式下执行
方法1: :%s@^[[:space:]]\+\([^[:space:]]\+\)@\1@g
方法2: :%s@^[[:space:]]\+@@g
“`
(2) 复制/etc/rc.d/init.d/functions文件至/tmp目录中,用查找替换命令为/tmp/functions文件的每个以空白字符开头的行的行首加上#号。
“`
~]# cp /etc/rc.d/init.d/functions /tmp/
~]# vim /tmp/functions
末行模式下执行 :%s@^[[:space:]]@#&@g
“`
(3) 为/tmp/grub2.cfg文件的前三行的行首加#号
“`
~]# vim /tmp/grub2.cfg
在末行模式下执行 :1,3s@.*@#&@
“`
(4) 将/etc/yum.repos.d/CentOS-Base.repo文件中所有的enabled=0替换为enabled=1,所有的gpgcheck=0替换为gpgcheck=1
“`
~]# vim /etc/yum.repos.d/CentOS-Base.repo
末行模式下执行
方法1:
:%s/enabled=0/enabled=1/g
:%s/gpgcheck=0/gpgcheck=1/g
方法2:
:%s@\(enabled\|gpgcheck\)=0@\1=1@g
“`
## 十、vim的多文件功能
### 1. 多文件
**格式**:vim FILE1 FILE2 …
**功能**:
(1) 一个vim命令编辑多个文件;
(2) 一次只能编辑一个;
(3) 需要进行向前或向后切换;
(4) 能够实现跨文件复制;

切换命令 | 含义
―――― | ――
prev | 向前切换一个文件
next | 向后切换一个文件
first | 切换至第一个
last | 切换至最后一个

**退出所有文件操作命令**

退出命令 | 含义
―――― | ―�C
:wqall | 保存所有文件并退出
:wall | 保存所有文件
:qall | 退出所有文件
### 2. 多窗口
在使用vim打开文件时,可以通过选项设置同时打开多个窗口。

选项 | 含义
―― | ――
-o | 水平分割窗口
-O | 垂直分割窗口

切换命令(Ctrl+w)
同时按住Ctrl+w后松开,然后按方向键进行切换,详情如下:

命令 | 含义
―― | ――
↑ | 向上切换文件
↓ | 向下切换文件
← | 向左切换文件
→ | 向右切换文件
s | 单个文件再做水平切割,也适用于单文件修改
v | 单个文件再做垂直切割,也适用于单文件修改

## 十一、定制vim的工作特性
在末行模式下做得设定,仅对当前vim进程有效;想要永久有效,要进行配置文件修改。
永久有效的配置文件:
(1) 全局的: /etc/vimrc
(2) 个人的: ~/.vimrc

命令 | 含义
―― | ――
:set number或:set nu | 显示行号
:set nonumber或:set nonu | 取消显示行号
:set showmatch或:set sm | 括号匹配高亮显示,光标移动到括号的一边,另一边会高亮显示
:set noshowmatch或:set nosm | 取消高亮显示
:set ai | | 启用自动缩进功能
:set noai | 取消自动缩进功能
:set hlsearch | 启用高亮搜索
:set nohlsearch | 取消高亮搜索
:syntax on | 启用语法高亮
:syntax off | 禁用语法高亮
:set ic | 启用忽略大小写功能
:set noic | 禁用忽略大小写功能

获取帮助:
:help [subject]

设置vim中,Tab键缩进空格数:
修改~/.vimrc或/etc/vimrc文件,加入:
set ts=4

本文由马哥Linux运维学员原创,首发于178linux.com

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


解决方案:解决linux下vim乱码的情况:(修改vimrc的内容)全局的情况下:即所有用户都能用这个配置文件地址:/etc/vimrc在文件中添加:setfileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936settermencoding=utf-8setencoding=utf-8如果只修改个人的vim配置情况:需要把/etc/
Linuxvi/vim所有的UnixLike系统都会内建vi文书编辑器,其他的文书编辑器则不一定会存在。但是目前我们使用比较多的是vim编辑器。vim具有程序编辑的能力,可以主动的以字体颜色辨别语法的正确性,方便程序设计。相关文章:史上最全Vim快捷键键位图—入门到进阶什么是vim
      vim正则匹配:空行:/^$/  /^[\t]*$/注释行:/^#/ /^[\t]*#/:1,$s/\([Rr]\)oot/\1ename/:1,$s/\(square\)and\(fair\)/\2and\1/ 
$select-editorSelectaneditor.Tochangelater,run'select-editor'.1./bin/ed2./binano<----easiest3./usr/bin/code4./usr/bin/vim.basic5./usr/bin/vim.tinyChoose1-5[2]:4
上次手贱忘了保存,这次就简单做个备忘吧,把踩过的坑记一下预览图安装工具:u盘、manjarokdeminimal20.0.3、win32DiskImager提取码:qt9f进bios、选择u盘启动、改语言、改时区、挂载分区(文件系统ext4、在200M左右的一个FAT分区上挂载/boot/efi)、安装安装很简单,按提示
Linux之文本编译器小结vim的优势所有的UNIX-LIKE习通都会内置vi文本编译器,其他的文本编译器则不一定存在很多软件的编译接口都会主动调用vivim有很强的程序编译能力,可以主动的一字体颜色辨别语法的正确性,方便程序设计因为程序简单,编译速度相当快vi的使用一般命令模
主机名字太长,怎么修改?  1.sudovim/etc/hostname 修改内容为wel,  本地主机名 2.sudovim/etc/hosts      修改主机名为wel,用于网络连接中主机名的识别 3.reboot 
目录#事故现场#事故原因#解决方法方法一:使用notepad转换方法二:使用vscode转换方法三:使用vim转换#参考#事故现场执行shell脚本文件,报错::notfound.sh:6:coreinstall.sh:查看脚本文件第6行,发现是空行;#事故原因window下的换行是回车符+换行符,也就是\r\n,而unix下是换行符\n
1、保存并退出linux下安装好了vim以及gcc后,我们开始新建一个c文件,例如:vimtest.c之后进入vim的编辑框中,点击i进入插入模式,开始编辑程序,当你编写好自己的程序之后,按Esc退出插入编辑状态,然后输入冒号加wq,点击Enter即可,完整的命令如下:wq如下图:  退出后,如果想要编译
概述使用VIM作简单字数统计背景想做一个简单的字数统计环境OSwin10shellmintty-2.9.41.需求概述需求需求统计文段内字符的数量支持自定义字符集2.方案1:vim自带统计概述vim自带方案操作定位到文段内某行vi
经典版下面这个键位图应该是大家最常看见的经典版了。对应的简体中文版其实经典版是一系列的入门教程键位图的组合结果,下面是不同编辑模式下的键位图。 
ssh是一个安全连接协议。作用两个:1.远程连接协议,2.远程文件传输协议协议默认端口为:22。 修改默认端口,再到ssh服务配置文件位置  vim/etc/ssh/ssh_config这条命令就可以修改了。按下ESC键,再输入:x 也可以退出vim。(和:q! 相同)修改注意:1.端口号在0-65535之间。2.别人
Vim是一个类似于Vi的著名的功能强大、高度可定制的文本编辑器,在Vi的基础上改进和增加了很多特性。VIM是自由软件。Vim普遍被推崇为类Vi编辑器中最好的一个,事实上真正的劲敌来自Emacs的不同变体。1999年Emacs被选为Linuxworld文本编辑分类的优胜者,Vim屈居第二。但在2000年2月Vim赢
在Vim中,有时需要将tab转换成space。使用ret命令(replacetab)。[range]ret[ab]![new-tabstop]举例:将第一行到文件尾的tab转换成space,每个tab用4个space替代。:setexpandtab:%ret!4如果没有给定4,则用当前的tab宽度设定替换为space。 相关配置文件命令::settabstop=4设
分屏命令记不得文件名就输入.可浏览文件命令英文功能:sp[文件名]split横向分屏:vsp[文件名]verticalsplit纵向分屏    切换分屏窗口先按Ctrlw切换窗口命令英文功能 wwindow切换下一个窗口 rreverse互换窗口 c
1查看ctags支持的语言ctags--list-languages2查看语言和扩展名的对应关系ctags--list-maps 3对当前目录下所有ctags支持的语言格式文件生成tagsctags-R*缺点很明显,tags会非常大,tags生成会非常慢,而且代码跳转会卡顿。4只对特定文件生成tagsctags`find-name"*.h"`ct
vim基本命令 $vimtutor可以查看基本的vim操作1h(left)j(down)k(up)l(right)q!wqi:insertbeforethecursor(insert)插队嘛,肯定在光标前面A:appendaftertheline(appending)2dw:删除一个单词,保留光标前面部分d$:删除光标之后的同行
~/.vimrc内容如下:setnocompatiblefiletypeoffsetrtp+=~/.vim/bundle/Vundle.vimcallvundle#begin()Plugin'VundleVim/Vundle.vim'Plugin'tpope/vim-fugitive'Plugin'tpope/vim-unimpaired'Plugin'tpope/vim-repeat'Plu
程序:硬盘静态的代码  占用磁盘空间进程:内存运行计算的代码 占用CPU运行内存父进程与子进程  树型结构进程唯一标识: PID僵尸进程找到父进程杀掉  孤儿进程疯狂要内存  危害大 pstree [选项]-a显示完整命令行   -p 查看PID [PID或用户
~/.vimrc"Configurationfileforvimsetmodelines=0 "CVE-2007-2438setnumber"setrelativenumber"显示相对行号(这个非常重要,慢慢体会)setcursorlinesetcursorcolumnsetrulersetscrollbindsetencoding=utf-8colormolokaisyntaxon"开启