【转】一个 Vim 重度用户总结的 vim 超全指南

我本人是 Vim 的重度使用者,就因为喜欢上这种双手不离键盘就可以操控一切的feel,Vim 可以让我对文本的操作更加精准、高效。

对于未使用过 Vim 的朋友来说,可能还无法体会到这种感觉。由于使用 Vim 有一定的学习成本,只有做到非常熟练的程度才能感受到它带来的快捷。

这里我就自己日常有使用过的 Vim 指令做一个总结,总共分成 21 点,建议有想学习 Vim 的同学,可以按照文章配合搜索引擎多多尝试,相信你会慢慢喜欢上 Vim。

本文更倾向于有一定基础的同学,因为有很多点,如果写得太详细的话,一定会变得相当啰嗦。

1. vim模式

正常模式(按Esc或Ctrl+[进入) 左下角显示文件名或为空
插入模式(按i进入) 左下角显示--INSERT--
可视模式(按v进入) 左下角显示--VISUAL--

2. 打开文件

# 打开单个文件
vim file
# 同时打开多个文件
vim file1 file2.. # 在vim窗口中打开一个新文件
:open [file] 【举个例子】
# 当前打开1.txt,做了一些编辑没保存
:open! 放弃这些修改,并重新打开未修改的文件 # 当前打开1.txt,做了一些编辑并保存
:open 2.txt 直接退出对1.txt的编辑,直接打开2.txt编辑,省了退出:wq再重新vim 2.txt的步骤 # 打开远程文件,比如ftp或者share folder
:e ftp://192.168.10.76/abc.txt
:e \qadrive\test\1.txt # 以只读形式打开文件,但是仍然可以使用 :wq! 写入
vim -R file # 强制性关闭修改功能,无法使用 :wq! 写入
vim -M file

3. 插入命令

i 在当前位置生前插入
I 在当前行首插入 a 在当前位置后插入
A 在当前行尾插入 o 在当前行之后插入一行
O 在当前行之前插入一行

4. 查找命令

最简单的查找

/text  查找text,按n健查找下一个,按N健查找前一个。
?text  查找text,反向查找,按n健查找下一个,按N健查找前一个。 vim中有一些特殊字符在查找时需要转义  .*[]^%/?~$ :set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找

快速查找,不需要手打字符即可查找

*        向后(下)寻找游标所在处的单词
# 向前(上)寻找游标所在处的单词 以上两种查找,n,N 的继续查找命令依然可以适用

精准查找:匹配单词查找

如果文本中有 hellohelloworldhellopython

那我使用 /hello ,这三个词都会匹配到。

有没有办法实现精准查找呢?可以使用

/hello\>

精准查找:匹配行首、行末

# hello位于行首
/^hello # world位于行末
/world$

5. 替换命令

~  反转游标字母大小写

r<字母>           将当前字符替换为所写字母
R<字母><字母>... 连续替换字母 cc 替换整行(就是删除当前行,并在下一行插入)
cw 替换一个单词(就是删除一个单词,就进入插入模式),前提是游标处于单词第一个字母(可用b定位)
C (大写C)替换至行尾(和D有所区别,D是删除(剪切)至行尾,C是删除至行位并进入插入模式) :s/old/new/ 用old替换new,替换当前行的第一个匹配
:s/old/new/g 用old替换new,替换当前行的所有匹配 :%s/old/new/ 用old替换new,替换所有行的第一个匹配
:%s/old/new/g 用old替换new,替换整个文件的所有匹配 :10,20 s/^/ /g 在第10行至第20行每行前面加四个空格,用于缩进。 ddp 交换光标所在行和其下紧邻的一行。

6. 撤销与重做

u 撤销(Undo)

U 撤销对整行的操作

Ctrl + r 重做(Redo),即撤销的撤销。

7. 删除命令

需要说明的是,vim 其实并没有单纯的删除命令,下面你或许理解为剪切更加准确。

以字符为单位删除

x   删除当前字符
3x 删除当前字符3次 X 删除当前字符的前一个字符。
3X 删除当前光标向前三个字符 dl 删除当前字符, dl=x
dh 删除前一个字符,X=dh D 删除当前字符至行尾。D=d$
d$ 删除当前字符至行尾
d^ 删除当前字符之前至行首

以单词为单位删除

dw  删除当前字符到单词尾
daw 删除当前字符所在单词

以行为单位删除

dd  删除当前行
dj 删除下一行
dk 删除上一行 dgg 删除当前行至文档首部
d1G 删除当前行至文档首部
dG 删除当前行至文档尾部 kdgg 删除当前行之前所有行(不包括当前行)
jdG 删除当前行之后所有行(不包括当前行) 10d 删除当前行开始的10行。
:1,10d 删除1-10行
:11,$d 删除11行及以后所有的行
:1,$d 删除所有行
J   删除两行之间的空行,实际上是合并两行。

8. 复制粘贴

普通模式中使用y复制

yy   复制游标所在的整行(3yy表示复制3行)

y^   复制至行首,或y0。不含光标所在处字符。
y$ 复制至行尾。含光标所在处字符。 yw 复制一个单词。
y2w 复制两个单词。 yG 复制至文本末。
y1G 复制至文本开头。

普通模式中使用p粘贴

p(小写):代表粘贴至光标后(下边,右边)
P(大写):代表粘贴至光标前(上边,左边)

9. 剪切粘贴

dd    其实就是剪切命令,剪切当前行
ddp 剪切当前行并粘贴,可实现当前行和下一行调换位置 正常模式下按v(逐字)或V(逐行)进入可视模式
然后用jklh命令移动即可选择某些行或字符,再按d即可剪切 ndd 剪切当前行之后的n行。利用p命令可以对剪切的内容进行粘贴 :1,10d 将1-10行剪切。利用p命令可将剪切后的内容进行粘贴。 :1, 10 m 20 将第1-10行移动到第20行之后。

10. 退出保存

:wq 保存并退出

ZZ 保存并退出

:q! 强制退出并忽略所有更改

:e! 放弃所有修改,并打开原来文件。

ZZ 保存并退出

:sav(eas) new.txt  另存为一个新文件,退出原文件的编辑且不会保存
:f(ile) new.txt 新开一个文件,并不保存,退出原文件的编辑且不会保存

11. 移动命令

以字符为单位移动

h   左移一个字符
l 右移一个字符
k 上移一个字符
j 下移一个字符 # 【定位字符】f和F
fx 找到光标后第一个为x的字符
3fd 找到光标后第三个为d的字符 F 同f,反向查找。

以行为单位移动

# 10指代所有数字,可任意指定
10h 左移10个字符
10l 右移10个字符
10k 上移10行
10j 下移10行 $ 移动到行尾
3$ 移动到下面3行的行尾

以单词为单位移动

w  向前移动一个单词(光标停在单词首部)
b 向后移动一个单词
e,同w,只不过是光标停在单词尾部
ge 同b,光标停在单词尾部。

以句为单位移动

(   移动到句首
) 移动到句尾

跳转到文件的首尾

gg  移动到文件头。 = [[  == ``
G 移动到文件尾。 = ]]

其他移动方法

^   移动到本行第一个非空白字符上。
0 移动到本行第一个字符上(可以是空格)

使用 具名标记 跳转,个人感觉这个很好用,因为可以跨文件。

使用 ma ,可以将此处标记为 a,使用 'a 进行跳转
使用 :marks 可以查看所有的标记
使用 :delm!可以删除所有的标记

当在查看错误日志时,正常的步骤是,vim打开文件,然后使用 shift+g 再跳转到最后一行,这里有个更简单的操作可以在打开文件时立即跳到最后一行。只要在 vim 和 文件 中间加个 + 即可。

vim + you.log

举一反三,当你想打开文件立即跳转到指定行时,可以这样

# 打开文件并跳转到 20 行
vim you.log +20

当你使用 / 搜索定位跳转或者使用 :行号 进行精准跳转时,有时我们想返回到上一次的位置,如何实现?

只要使用 Ctrl+o 即可返回上一次的位置。

12. 排版功能

缩进

:set shiftwidth?   查看缩进值
:set shiftwidth=4 设置缩进值为4 # 缩进相关 最好写到配置文件中 ~/.vimrc
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab >> 向右缩进
<< 取消缩进

如何你要对代码进行缩进,还可以用 == 对当前行缩进,如果要对多行对待缩进,则使用 n==,这种方式要求你所编辑的文件的扩展名是被vim所识别的,比如.py文件。

排版

:ce   居中
:le 靠左
:ri 靠右

13. 注释命令

多行注释

进入命令行模式,按ctrl + v进入 visual block模式,然后按j, 或者k选中多行,把需要注释的行标记起来

按大写字母I,再插入注释符,例如//

按esc键就会全部注释了

取消多行注释

进入命令行模式,按ctrl + v进入 visual block模式,按字母l横向选中列的个数,例如 // 需要选中2列

按字母j,或者k选中注释符号

按d键就可全部取消注释

复杂注释

:3,5 s/^/#/g 注释第3-5行
:3,5 s/^#//g 解除3-5行的注释 :1,$ s/^/#/g 注释整个文档
:1,$ s/^#//g 取消注释整个文档 :%s/^/#/g 注释整个文档,此法更快
:%s/^#//g 取消注释整个文档

14. 调整视野

"zz":命令会把当前行置为屏幕正中央,
"zt":命令会把当前行置于屏幕顶端
"zb":则把当前行置于屏幕底端. Ctrl + e 向下滚动一行
Ctrl + y 向上滚动一行 Ctrl + d 向下滚动半屏
Ctrl + u 向上滚动半屏 Ctrl + f 向下滚动一屏
Ctrl + b 向上滚动一屏 【跳到指定行】:两种方法 可以先把行号打开
:set nu 打开行号 :20 跳到第20行
20G 跳到第20行

15. 区域选择

要进行区域选择,要先进入可视模式

v   以字符为单位,上下左右选择
V 以行为单位,上下选择 选择后可进行操作
d 剪切/删除
y 复制 Ctrl+v 如果当前是V(大写)模式,就变成v(小写)
如果当前是v(小写)模式,就变成普通模式。
如果当前是普通模式,就进入v(小写)模式 利用这个,可以进行多行缩进。 ggVG 选择全文

16. 窗口控制

新建窗口

# 打开两个文件分属两个窗口
vim -o 1.txt 2.txt # 假设现在已经打开了1.txt :sp 2.txt 开启一个横向的窗口,编辑2.txt
:vsp 2.txt 开启一个竖向的窗口,编辑2.txt :split 将当前窗口再复制一个窗口出来,内容同步,游标可以不同
:split 2.txt 在新窗口打开2.txt的横向窗口 # 需要注意:内容同步,但是游标位置是独立的 Ctrl-w s 将当前窗口分成水平窗口
Ctrl-w v 将当前窗口分成竖直窗口 Ctrl-w q 等同:q 结束分割出来的视窗。
Ctrl-w q! 等同:q! 结束分割出来的视窗。
Ctrl-w o 打开一个视窗并且隐藏之前的所有视窗

窗口切换

# 特别说明:Ctrl w <字母> 不需要同时按

Ctrl-w h    切换到左边窗口
Ctrl-w l 切换到右边窗口 Ctrl-w j 切换到下边窗口
Ctrl-w k 切换到上边窗口 # 特别说明:全屏模式下
:n 切换下一个窗口
:N 切换上一个窗口
:bp 切换上一个窗口 # 特别说明:非全屏模式 :bn 切换下一个窗口,就当前位置的窗口的内容变了,其他窗口不变
:bN 切换上一个窗口,就当前位置的窗口的内容变了,其他窗口不变

窗口移动

# 特别说明:Ctrl w <字母> 不需要同时按

Ctrl-w J   将当前视窗移至最下面
Ctrl-w K 将当前视窗移最上面 Ctrl-w H 将当前视窗移至最左边
Ctrl-w L 将当前视窗移至最右边 Ctrl-ww 按顺序切换窗口

调整尺寸

# 友情提示:键盘切记不要处于中文状态

Ctrl-w +   增加窗口高度
Ctrl-w - 减少窗口高度

退出窗口

:close    关闭当前窗口
:close! 强制关闭当前窗口 :q 退出,不保存
:q! 强制退出,不保存 :x 保存退出
:wq 保存退出
:wq! 强制保存退出 :w <[路径/]文件名> 另存为
:savesa <[路径/]文件名> 另存为 ZZ 保存并退出。 :only 关闭所有窗口,只保留当前窗口(前提:其他窗口内容有改变的话都要先保存)
:only! 关闭所有窗口,只保留当前窗口 :qall 放弃所有操作并退出
:wall 保存所有,
:wqall 保存所有并退出。

17. 文档加密

vim -x file_name

然后输入密码:
确认密码: 如果不修改内容也要保存。:wq,不然密码设定不会生效。

18. 录制宏

按q键加任意字母开始录制,再按q键结束录制(这意味着vim中的宏不可嵌套),使用的时候@加宏名,比如qa。。。q录制名为a的宏,@a使用这个宏。

19. 执行命令

# 重复前一次命令
. # 执行shell命令
:!command # 比如列出当前目录下文件
:!ls # 执行脚本
:!perl -c script.pl 检查perl脚本语法,可以不用退出vim,非常方便。
:!perl script.pl 执行perl脚本,可以不用退出vim,非常方便。 :suspend或Ctrl - Z 挂起vim,回到shell,按fg可以返回vim。

20. 帮助命令

在Unix/Linux系统上
$ vimtutor # 普通模式下
键盘输入vim或F1 # 命令行模式下 :help 显示整个帮助
:help xxx 显示xxx的帮助,比如 :help i, :help CTRL-[(即Ctrl+[的帮助)。
:help 'number' Vim选项的帮助用单引号括起 在Windows系统上
:help tutor

21. 配置命令

显示当前设定

:set或者:se显示所有修改过的配置
:set all 显示所有的设定值
:set option? 显示option的设定值
:set nooption 取消当期设定值
:ver 显示vim的所有信息(包括版本和参数等) # 需要注意:全屏模式下
:args 查看当前打开的文件列表,当前正在编辑的文件会用[]括起来

更改设定

:set nu   显示行号

set autoindent(ai)   设置自动缩进
set autowrite(aw) 设置自动存档,默认未打开
set backup(bk) 设置自动备份,默认未打开 set background=dark或light,设置背景风格 set cindent(cin) 设置C语言风格缩进 :set ts=4 设置tab键转换为4个空格 :set ff=unix # 修改文件dos文件为unix :set shiftwidth? 查看缩进值
:set shiftwidth=4 设置缩进值为4 :set ignorecase  忽略大小写的查找
:set noignorecase  不忽略大小写的查找 :set paste # insert模式下,粘贴格式不会乱掉 :set ruler?  查看是否设置了ruler,在.vimrc中,使用set命令设制的选项都可以通过这个命令查看 :scriptnames  查看vim脚本文件的位置,比如.vimrc文件,语法文件及plugin等。 :set list 显示非打印字符,如tab,空格,行尾等。如果tab无法显示,请确定用set lcs=tab:>-命令设置了.vimrc文件,并确保你的文件中的确有tab,如果开启了expendtab,那么tab将被扩展为空格。 :syntax 列出已经定义的语法项
:syntax clear 清除已定义的语法规则 :syntax case match 大小写敏感,int和Int将视为不同的语法元素
:syntax case ignore 大小写无关,int和Int将视为相同的语法元素,并使用同样的配色方案

以上就是我使用 Vim 的一些使用总结,希望对你能有帮助。


最后,送你一张 Vim 的键盘图,你可以将它设置为你的电脑桌面,对你初学 Vim 可能会有帮助。

你可以关注本公众号「Python编程时光」,在后台回复“vim” ,即可获取高清大图。


【转】一个 Vim 重度用户总结的 vim 超全指南的更多相关文章

  1. 一个 Vim 重度用户总结的 vim 超全指南

    我本人是 Vim 的重度使用者,就因为喜欢上这种双手不离键盘就可以操控一切的feel,Vim 可以让我对文本的操作更加精准.高效. 对于未使用过 Vim 的朋友来说,可能还无法体会到这种感觉.由于使用 ...

  2. 以普通用户启动的Vim如何保存需要root权限的文件

    在Linux上工作的朋友很可能遇到过这样一种情况,当你用Vim编辑完一个文件时,运行:wq保存退出,突然蹦出一个错误: E45: 'readonly' option is set (add ! to ...

  3. [转] 以普通用户启动的Vim如何保存需要root权限的文件

    [转] 以普通用户启动的Vim如何保存需要root权限的文件 在Linux上工作的朋友很可能遇到过这样一种情况,当你用Vim编辑完一个文件时,运行:wq保存退出,突然蹦出一个错误: E45: 'rea ...

  4. vim与程序员 vi/vim 的使用

    vim与程序员   所有的 Unix Like 系统都会内建 vi 文书编辑器,其他的文书编辑器则不一定会存在. 但是目前我们使用比较多的是 vim 编辑器. vim 具有程序编辑的能力,可以主动的以 ...

  5. 【Vim命令大全】史上最全的Vim命令

    曾经使用了两年多的Vim,手册也翻过一遍.虽然现在不怎么用vim了,曾经的笔记还是贴出来,与喜欢vim的朋友分享. 1. 关于Vim vim是我最喜欢的编辑器,也是linux下第二强大的编辑器. 虽然 ...

  6. 工程师技术(五):Shell脚本的编写及测试、重定向输出的应用、使用特殊变量、编写一个判断脚本、编写一个批量添加用户脚本

    一.Shell脚本的编写及测 目标: 本例要求两个简单的Shell脚本程序,任务目标如下: 1> 编写一个面世问候 /root/helloworld.sh 脚本,执行后显示出一段话“Hello ...

  7. shell编写一个批量添加用户脚本

                                                          shell编写一个批量添加用户脚本 5.1问题 本例要求在虚拟机server0上创建/roo ...

  8. 『学了就忘』vim编辑器基础 — 94、vim编辑器介绍

    目录 1.vim编辑器简介 2.vim的工作模式 (1)命令模式 (2)输入模式 (3)最后行模式(末行模式) 1.vim编辑器简介 vim是一个全屏幕纯文本(绘个表格或者插个图片就不要想了)编辑器, ...

  9. vim插件的安装方式 -- vim注释插件和doxygen函数注释生成插件-ctrlp插件-tabular等号对齐 插件

    使用unzip的时候 指定 -d选项, 是说明解压到的 目标地址. 这个参数还是比较方便的, 比直接unzip到当前目录, 然后在去拷贝到目标目录, 然后再删除当前目录中的解压文件夹, 方便多了. 使 ...

随机推荐

  1. K8S工作原理

    kubernetes(k8s)是docker容器用来编排和管理的工具 我们通过kubectl向k8s Master发出指令.kubernetes Master主要是提供API Server.Sched ...

  2. js中箭头函数 及 针对箭头函数this指向问题引出的单体模式

    ES6允许使用“箭头”(=>)定义函数 var f = a = > a //等同于 var f = function(a){ return a; } 如果箭头函数不需要参数或需要多个参数, ...

  3. Node.js+koa2

    const Koa = require('koa') const app = new Koa() const bodyParser = require('koa-bodyparser') app.us ...

  4. 区块链开源实现hyperledger fabric架构详解

    hyperledger fabric是区块链中联盟链的优秀实现,主要代码由IBM.Intel.各大银行等贡献,目前v1.1版的kafka共识方式可达到1000/s次的吞吐量.本文中我们依次讨论:区块链 ...

  5. Kubernetes 入门-学习-nginx安装-dashboard安装

    一.入门 1.Kubernetes中文社区---http://docs.kubernetes.org.cn/ 2.Kubernetes集群组件: - etcd 一个高可用的K/V键值对存储和服务发现系 ...

  6. Java Web学习总结(4)HttpServletResponse

    Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象.和代表响应的response对象.获取网页提交过来的数据,只需要找request对象就行了.要向网 ...

  7. CentOS上安装Git及配置远程仓库

    首先登陆CentOS服务器,连接上服务器之后我们使用yum remove git 命令删除已安装的Git,若之前没安装过Git则不需要这一步.注意前提是你的CentOS服务器上安装了yum,这是Cen ...

  8. 创建kudu数据集测试总结

    参考文档: https://cloud.tencent.com/developer/article/1474797 https://www.tgshenghe.com/a77nr1/nzt9t1.ht ...

  9. docker安装MySQL5.7示例!!坑

    docker  pull  mysql 一.错误的启动 [root@localhost  ~]#  docker  run  ‐‐name  mysql01  ‐d  mysql 42f0981990 ...

  10. CSS——相对定位、绝对定位、固定定位

    相对定位: position:relative 当元素被设置相对定位或是绝对定位后,将自动产生层叠,他们的层叠级别自然的高于文本流,除非设置其z-index值为负值. 并且我们发现当相对定位元素进行位 ...