编辑器之神——Vim之常用快捷键分类整理

news/2024/7/21 14:15:03 标签: vim, 编辑器, linux

文章目录

    • Vim起源
    • 1 模式切换
    • 2 启动vim
    • 3 文档操作
    • 4 移动光标
      • 4.1 基本移动(文档方向=文字输入方向:后->前)
      • 4.2 翻屏(不修改代码)
      • 4.3 标记(导航)
    • 5 插入
      • 5.1 基本插入
      • 5.2 改写插入
      • 5.3 拼接行
      • 5.4 多行注释
    • 6 删除
    • 7 剪切
    • 8 复制
    • 9 粘贴
    • 10 选择
    • 11 寄存器
    • 12 查找与替换
      • 查找
      • 替换
    • 13 重复操作
    • 14 撤销、重做
    • 15 锁屏、解锁

Vim起源

  Vim是从vi发展出来的一个文本编辑器,vi(visual editor)是unix/linux操作系统中最经典的文本编辑器vim原来的名字叫做vi imitation(vi模拟器),目的是完全复制vi的功能,为开源和在类unix系统中移植而生,在成功被移植到unix之后名字变成了vi improved(vi改进版)。
  Vim创造了开源世界“协作精神”和“自由软件持续改进”的奇迹。成为了自由软件历史上不朽的“丰碑”。后世为了纪念这场伟大的编辑器开源运动,给vim封了神——“编辑器之神”。

有一款与Vim并称的编辑器Emacs,远古时代诞生的始祖软件很多都是用Emacs编辑器创造的,Emacs被称作“神之编辑器”,为了纪念使用Emacs写C的大神们。

  最近涉及了很多Linux下的工作,使用了一段时间的Vim,虽然Vim的学习曲线陡峭,但是奇异的操作方式在熟悉了之后带来的是对鼠标依赖的解除,用起来还是很带感的,虽然快捷键非常多,但快捷键的设定富有逻辑性,理解了之后要在Vim下生存并不是很困难的事,存活下来之后就是日常使用增加熟练度。
  整理了常用的Vim快捷键分类如下。

1 模式切换

  • esc:normal常规模式;
  • i:insert插入模式;
  • v:visual可视模式;
  • ctrl+v:visual block可视块模式
  • : ——command命令模式;
  • r:replace替换模式。

vim_21">2 启动vim

  • vim + file: 打开文件,从文件的末尾开始;
  • vim +num file: 打开文件,从第num行开始;
  • vim +/string file: 打开file,并将光标停留在第一个找到的string上。
  • vim -c cmd file: 在打开文件前,先执行指定的命令;
  • vim -R file: 以只读的方式打开文件,但可以强制保存;
  • vim -M file: 以只读的方式打开文件,不可以强制保存;
  • vim -r file: 恢复上次异常退出的文件;

3 文档操作

  • :——进入命令模式

  • :!——调用shell命令的前缀“!”,比如:!pwd可以显示当前路径

  • :w ——保存修改;

  • :q[uit] ——退出当前窗口(CTRL-w q);

  • :q!——强制退出(可在不保存的情况下退出)

  • :wq ——保存并退出(ZZ或:x);

  • :saveas newfilename ——另存为;

  • :e ——重新加载当前文档;

  • :f或ctrl+g ——显示文档名,是否修改,和光标位置。

  • :help ——查看帮助

4 移动光标

4.1 基本移动(文档方向=文字输入方向:后->前)

  • h,j,k,l:左(退格),上,下,右(空格)移动光标
  • b:移动到上一个单词的开头;
  • B:移动到上一个单词的开头(忽略标点);
  • w:移动到下一个单词的开头;
  • W:移动到下一个单词的开头(忽略标点);
  • e:移动到单词结尾(如果已在结尾则移动到下一单词结尾);
  • E:移动到单词结尾(忽略标点);
  • ge:移动到上一个单词结尾;
  • gE:移动到上一个单词结尾(忽略标点);
  • %:移动到配对的括号
  • (:上移一句;
  • ):下移一句;
  • {:移动到上一个空行,段落以空行为间隔;
  • }:移动到下一个空行;
  • [[:将光标移动到上一个代码段(或函数)的行首;
  • ]]:将光标移动到下一个代码段(或函数)的行首;
  • +或Enter: 把光标移至下一行第一个非空白字符;
  • -: 把光标移至上一行第一个非空白字符;
  • f+“单字符”:行内移动到下一个目标,使用“,”和“;”可以沿上下继续搜索;
  • F+“单字符”:行内移动到上一个目标,使用“,”和“;”可以沿上下继续搜索;
  • t+“单字符”:行内移动到下一个目标前,使用“,”和“;”可以沿上下继续搜索;
  • T+“单字符”:行内移动到上一个目标后,使用“,”和“;”可以沿上下继续搜索;

可以在操作前加上数字,表示操作的重复次数:
[n]+“移动操作”——操作前加上“数字”表示重复次数,3h表示左移三次,3fx表示移到后续的第3个x的位置;
[n]+“i”+“输入”——重复多次输入,3igo表示输入gogogo。

  • 0:移动到行首
  • ^:移动到行首(非空白字符)
  • $:移动到行尾
  • H:移动到屏幕上方(high)
  • M:移动到屏幕中间(middle)
  • L:移动到屏幕下方(low)
  • gg:移动到文件开头
  • G:移动到文件结尾
  • n| ——移动到第n列
  • nG或:n ——移动到第n行

4.2 翻屏(不修改代码)

  • ctrl+b: 向上翻一屏;
  • ctrl+f:向下翻一屏;
  • ctrl+u:向上翻半屏;
  • ctrl+d:向下翻半屏;
  • ctrl+e:向下滚动一行;
  • ctrl+y:向上滚动一行;
  • zz:将当前光标所在行居中;
  • zt:将当前光标所在行置顶;
  • zb:将当前光标所在行置底;

4.3 标记(导航)

可以用Ctrl+oCtrl+i进行后退和前进。

m{a-z}: 标记光标所在位置,局部标记,只用于当前文件;
m{A-Z}: 标记光标所在位置,全局标记,标记后,退出Vim, 重新启动,标记仍有效;
`{a-z}: 移动到标记位置;
`{0-9}:回到上[1-10]次关闭vim时最后离开的位置;

``: 移动到上次编辑的位置;
`": 移动到上次离开的地方;
`.: 移动到最后改动的地方;

:marks ——显示所有标记;
:delmarks a b ——删除标记a和b;
:delmarks a-c ——删除标记a、b和c;
:delmarks a c-f ——删除标记a、c、d、e、f;
:delmarks! ——删除当前缓冲区的所有标记;

:help mark-motions ——查看更多关于mark的知识。

上述操作中,出现`(点号)的地方也可以使用’(单引号),使用点号可以精确到列,使用单引号只精确到行

5 插入

所有的插入操作都会自动进入i插入模式

5.1 基本插入

  • i:光标前插入;
  • I:当前行第一个非空字符前插入
  • a: 在光标后插入;
  • A: 在当前行最后插入;
  • o: 在下面新建一行插入;
  • O: 在上面新建一行插入;
  • :r filename在当前位置插入另一个文件的内容;
  • :[n]r filename在第n行插入另一个文件的内容;
  • :r !date ——在光标处插入当前日期与时间;
  • :r !command ——同理,可以将其它shell命令的输出插入当前文档。

5.2 改写插入

  • [n]cc:改写光标所在行;
  • [n]s: 以输入的文本替代光标之后1(n)个字符,相当于c[n]l;
  • [n]S: 删除指定数目的行,并以所输入文本代替之,相当于[n]cc;

c[n]+移动操作:改写对应范围的内容([n]+操作——在第4节的移动操作里已经介绍过了):

  • c[n]h:改写光标左边1(n)个字符;
  • c[n]l: 改写光标右边1(n)个字符。
  • c[n]k: 改写光标上n行(包含当前行)的内容;
  • c[n]j:改写光标下n行(包含当前行)的内容;
  • c[n]b:改写光标位置到上n个单词的开头位置的内容;
  • c[n]w:改写光标位置到下n个单词的开头位置的内容;
  • c[n]e:改写光标位置到下n个单词的结尾位置的内容;
  • c$: 改写从光标当前位置到行尾;
  • c0: 改写从光标当前位置到行首;
  • cgg: 改写光标以上的所有行;
  • cG: 改写光标以下的所有行。
  • r+“字符”:替换当前位置的字符
  • R:进入replace模式,输入的内容会覆盖当前位置

5.3 拼接行

  • J:将下一行拼接到当前行末尾

5.4 多行注释

通过visual block可视块模式可以使用列选中功能,从而在想要的位置进行多行注释。

在行首插入注释符:

按ctrl+v进入visual block可视块模式;
利用h、j、k、l方向键调整需要注释多少行;
再按I(大写字母i,shift+i)进入插入模式,并将光标移至所有选中列的行首;
输入代表注释的符号“//或者#;(在这一步只会在选中的第一行出现注释符号)
再次按ESC键,等待一会儿即可完成多行注释。(此时才会在所有选中行出现注释符号)

在选中区域使用注释符替换:

按ctrl+v进入visual block可视块模式;
利用h、j、k、l方向键调整需要替换成注释符的区域;
再按s进入插入模式,并将光标选中的区域清空;
输入注释符“//或者#;(在这一步只会在选中的第一行出现注释符)
再次按ESC键,等待一会儿即可完成多行注释。(此时才会在所有选中行出现注释符)

需要删除注释的时候,同样通过列选中功能,选中所有的注释之后,d或者x即可。(d和x在下面会介绍)

6 删除

  • [n]dd:删除1(n)行;

d[n]+移动操作:删除对应范围的内容,d操作删除的内容会保存到vim寄存器,相当于剪切:

  • d[n]h: 删除光标左边1(n)个字符。
  • d[n]l: 删除光标右边1(n)个字符。
  • d[n]k: 删除光标上n行(包含当前行)的内容;
  • d[n]j: 删除光标下n行(包含当前行)的内容;
  • d[n]b:删除光标位置到上n个单词的开头位置的内容;
  • d[n]w:删除光标位置到下n个单词的开头位置的内容;
  • d[n]e:删除光标位置到下n个单词的结尾位置的内容;
  • d$或D: 删除从光标当前位置到行尾的内容;
  • d0: 删除从光标当前位置到行首的内容。
  • dgg: 删除光标以上的所有行;
  • dG: 删除光标以下的所有行;
  • :m,nd ——删除m行到n行的内容。

vim里,d操作删除的字符也会放入寄存器供粘贴时使用,所以也等同于剪切操作。

7 剪切

  • [n]x: 剪切光标右边n个字符,相当于d[n]l;
  • [n]X: 剪切光标左边n个字符,相当于d[n]h。

8 复制

  • y: 复制在可视模式下选中的文本;
  • yy或Y: 复制整行文本;

y[n]+移动操作:复制对应范围的内容:

  • y[n]h: 复制光标左边1(n)个字符。
  • y[n]l: 复制光标右边1(n)个字符。
  • y[n]k: 复制光标上n行(包含当前行)的内容;
  • y[n]j: 复制光标下n行(包含当前行)的内容;
  • y[n]b:复制光标位置到上n个单词的开头位置的内容;
  • y[n]w:复制光标位置到下n个单词的开头位置的内容;
  • y[n]e:复制光标位置到下n个单词的结尾位置的内容;
  • y$: 复制从光标当前位置到行尾的内容;
  • y0: 复制从光标当前位置到行首的内容;
  • ygg: 复制光标以上的所有行;
  • yG: 复制光标以下的所有行;
  • :m,ny ——复制m行到n行的内容。

9 粘贴

  • p: 在光标之后粘贴;
  • P: 在光标之前粘贴。

10 选择

  • v:进入visual模式,可以执行选择操作
  • e+“移动操作”:选择范围,选择完成后可以执行c、d、y、p等操作

11 寄存器

复制粘贴功能需要用到寄存器,使用的是vim自身的寄存器,所有只能在vim中使用
要关联系统剪贴板,需要vim的clipboard功能的支持
使用“vim --version | grep clipboard”查看
clipboard之前是+表示支持,-表示不支持
安装gvim或者vim-gnome可以支持剪贴板

:reg 显示所有寄存器的内容
"" ——不加寄存器索引时,默认使用的寄存器,""yy把当前行的内容放入默认寄存器。
"+ ——系统剪贴板,"+yy把当前行的内容放入系统剪贴板,"+p从系统剪贴板复制到vim

12 查找与替换

查找

*——向下查找当前光标所在单词,可继续使用n向后查,N向前查
#——向上查找当前光标所在单词,可继续使用n向后查,N向前查
/+“字符串”:向下查找字符串,可继续使用n向后查,N向前查
?+“字符串”:向上查找字符串,可继续使用n向后查,N向前查

替换

:s/old/new ———用new替换当前行第一个old。
:s/old/new/g ——用new替换当前行所有的old。
:n1,n2s/old/new/g - 用new替换文件n1行到n2行所有的old。
:%s/old/new/g - 用new替换文件中所有的old。
:%s/^/xxx/g - 在每一行的行首插入xxx,^表示行首。
:%s/$/xxx/g - 在每一行的行尾插入xxx,$表示行尾。

所有替换命令末尾加上c,每个替换都将需要用户确认。 
如:%s/old/new/gc,加上i则忽略大小写(ignore)。

13 重复操作

. ————(英文句号)重复执行上一次的操作

例如你想手动将文件中所有的old转换为new,只需要:

进入普通模式,将光标移到old下

  1. 敲击*查找old
  2. 敲击cw替换old,输入new
  3. 按ESC继续进入普通模式
  4. 敲击n查找下一个old
  5. 敲击.重复执行替换(重复执行的是步骤2中的输入new操作)
  6. 重复步骤4、5即可

14 撤销、重做

  • u:撤销
  • ctrl+r:重做

15 锁屏、解锁

  • ctrl+s:锁屏
  • ctrl+q:解锁

http://www.niftyadmin.cn/n/1544736.html

相关文章

group_concat

分割字符串 group_concat(a.EvidencesID separator ,) as EvidencesID #在MySQL配置文件(my.ini)中默认无该配置项,使用默认值时,值为1024; #要彻底修改,在MySQL配置文件(my.ini)中加上 group_concat_max_len -1 # -1为最大值或填入你要的最…

获取网页中图片

<?php$textfile_get_contents(http://www.jb51.net/); //取得所有img标签&#xff0c;并储存至二维数组 $match 中 preg_match_all(/<img[^>]*>/i, $text, $match); //打印出match print_r($match); 转载于:https://www.cnblogs.com/fenle/p/4827542.html

CentOS下nginx的安装流程

文章目录1 基础配置2 安装依赖库2.1 安装g编译器2.2 安装pcre库2.3 安装zlib库2.4 安装OpenSSL库3 安装nginx3.1 获取nginx包3.2 解压nginx文件3.3 配置nginx安装选项3.4 添加第三方模块3.5 编译nginx3.6 安装nginx4 运行nginx服务5 访问nginx网址6 启动和运行可能遇到的问题1 …

java解析json

在上公布了很多JAVA下的json构造和解析工具&#xff0c;其中org.json和json-lib比较简单&#xff0c;两者使用上差不多但还是有些区别。下面首先介绍用json-lib构造和解析Json数据的方法示例。 一、介绍 JSON-lib包是一个beans,collections,maps,java arrays 和XML和JSON互相转…

使用nginx搭建音视频点播服务——基于HLS协议

文章目录1 音视频技术1.1 流媒体1.2 点播与直播1.3 HLS流媒体协议1.4 CDN2 搭建点播服务&#xff08;音视频同理&#xff09;2.1 nginx服务器2.2 nginx-vod-module模块2.3 配置nginx点播服务2.3.1 local模式2.3.1.1 常规配置2.3.1.2 local模式下的多码率自适应2.3.1.3 local模式…

18 快速排序1(Quick Sort)

文章目录1 题目2 思路2.1 两种实现方式2.1.1 同向双指针2.1.2 对向双指针2.2 图解2.2.1 同向双指针2.2.2 对向双指针2.2 时间复杂度2.3 空间复杂度3 源码3.1 同向双指针&#xff08;取尾元素为key&#xff09;3.2 对向双指针&#xff08;取中点元素为key&#xff09;1 题目 题…

7.Python进阶_函数对象

Vamie前辈的博客地址&#xff1a;http://www.cnblogs.com/vamei/archive/2012/07/10/2582772.html #!/usr/bin/pythonimport functools#秉承着一切皆对象的理念&#xff0c;我们再次回头来看函数(function)。函数也是一个对象&#xff0c;具有属性&#xff08;可以使用dir()查询…

18 快速排序2(Quick Sort)

由于CSDN单篇帖子的字数限制&#xff0c;补充上一篇快速排序1中的对向双指针算法的图解&#xff1a; 2.2.2 对向双指针 在对向双指针的排序方式中&#xff0c;以key值为序列中点元素为例。图解如下&#xff1a; 待排序数组 #mermaid-svg-qWeCUlJv4YRwW3wT {font-family:&quo…