整理常用的 vim 命令

整理常用的 vim 命令

vim 是一款功能强大的文本编辑器,它是Linux下常用的编辑器之一,对于熟练掌握了 vim 的人来说,用它编辑文件,方便又快捷,能极大的提高工作效率

vim 功能强大,对应的命令也非常的多,对于初学者来说,看到这么多的命令容易打退堂鼓,想当初,自己刚接触vim的时候,由于不熟悉vim,每一个命令都要上网查阅,真的是举步维艰

其实,工作中常用的vim命令也就那么些,只需学习这些常用的命令,勤加练习,假以时日定能熟练的掌握它们,进而就能解决大部分的编辑问题

本文结合我自己工作中使用vim的经验,整理了一些常用的vim命令

vim 的模式

进入vim之后,会有多种不同的模式,模式之间的切换,让你只需要通过键盘,就能完成文本的编辑,这也是vim存在多种模式的原因,vim主要有以下几个模式

  • 正常模式

刚进入vim界面的时候是正常模式,复制、粘贴操作都是在这个模式下进行的

  • 插入模式

文本内容输入,修改是在这个模式下进行的

可以按 i 或者 I 进入到插入模式,在插入模式下,按 esc会返回到正常模式

  • 命令模式

输入或者修改完之后,需要保存退出,这个时候vim就会进入到命令模式

esc + : 进入命令模式,再次按 esc 返回正常模式

  • 可视模式

可视模式是对文件进行大量重复操作的时候,可以一次性执行完成的功能

可通过 vVctrl v 进入可视模式

常用命令

  • 打开、保存、另存为、退出
vim file        #打开文件
vim             #打开临时文件,保存的时候需要制定文件名

:w              #保存
:w file         #另存为

:q              #退出
:wq             #保存并退出
:x              #保存并退出
ZZ 或 shift zz  #保存并退出
:q!             #不保存退出,会丢失数据

例如: vim a.txt命令打开 a.txt文件,假如 a.txt存在的话,打开已有的,不存在的话,则会打开一个新的文件

  • 光标移动
k、j            #光标向上、向下移动一行
h、l            #光标向左、向右移动一个位置, l 是字母L的小写

^               #光标移动到当前行首
$               #光标移动到当前行尾

w               #光标向前移动一个单词
b               #光标向后移动一个单词

gg              #光标移动到文件开头
G 或 shift g    #光标移动到文件末尾
n G             #光标移动到指定行号的行首, n 表示行号

ctrl f          #向下翻一页
ctrl b          #向上翻一页

分别按 k j h l能实现光标上下左右移动,键盘上下左右箭头的按键也表示方向键,它跟 k j h l 有什么区别呢

如果是图形界面和远程终端都可以使用,如果是字符终端的时候,键盘上下左右箭头的按键有时会出现乱码,所以最好统一使用 k j h l

  • 插入
i               #光标前插入
I               #当前行首插入

o               #当前行后面插入一行,光标移动到插入行的行首,o 是字母,不是数字0
O               #当前行前面插入一行,光标移动到插入行的行首,O 是字母,不是数字0

a               #当前光标后插入
A               #当前行尾插入

小技巧: 当前处于正常模式, 输入数字 10,按 i进入插入模式, 接着输入字母 #,最后按 esc键,此时,在光标所在行会出现 10 个 #字符,相当于插入了10个 #,当你想在文本中插入一行字符作为分割线的时候,就能应用到这个小技巧

  • 复制、粘贴、剪切
yy 或 Y             #复制光标所在行
n yy 或 n Y         #从光标行向下复制 n 行
y$                  #复制从光标位置到行尾
y^                  #复制从光标位置到行首
yw                  #复制一个单词
ynw                 #复制n个单词,n为单词个数

yl                  #复制光标位置的一个字符, l 是字母L的小写形式
ynl                 #从光标位置向右边复制n个字符, 光标位置也算一个字符

yh                  #复制光标位置左边的一个字符,光标位置不计算在内
ynh                 #从光标左边位置向左边复制n个字符,光标位置不计算在内

dd                  #剪切(删除)光标所在行
ndd                 #从光标行向下剪切(删除)n行
d$ 或者 D           #从光标位置剪切(删除)到行尾
d^                  #从光标前一个位置剪切(删除)到行首

dl                  #剪切(删除)光标位置的字符
dnl                 #从光标位置向行尾方向剪切(删除)n个字符
dh                  #剪切(删除)光标坐标位置的一个字符
dnh                 #从光标左边位置向行首方向剪切(删除)n个字符

dw                  #剪切(删除)光标位置的一个单词
dnw                 #从光标位置向行尾方向,剪切(删除)n个单词,光标位置的单词也算在内

p                   #在当前光标后粘贴
P 或 shift p        #大写的字母p, 再当前光标前粘贴

如果是复制一行内容,再按小写字母 p则是在当前光标下一行进行粘贴,而不是在当前光标后面粘贴,同样的,如果是按大写字母 P则是在当前光标上一行粘贴

如果一个单词比较长,通过 dw 剪切一个单词时,剪切的是光标位置到光标位置单词的结尾字符串

比如,现有一个字符串 9ssxphu7898%mn ,假如光标位于字符 h 位置,按 dw,此时剪切的字符串是 hu7898%mn

  • 删除、替换字符
x   #每次删除光标处的字符,删除之后,光标后面的字符串向光标方向移动一个位置

X   #每次删除光标前面一个字符,删除之后,光标以及后面的字符串会向行首方向移动一个位置

r   #替换光标位置的一个字符

替换字符的方法: 光标移动到准备替换的字符位置,按 r键,然后按替换之后的字符键,光标位置的字符就被目标字符替换了

  • 撤销、重做
u       #撤销
ctrl r  #重做

在多行操作的时候,有时候会出现误操作,这时候可以按 u 键撤销误操作

可以多次进行撤销,当你每按一次 u键的时候,之前做过的操作就会被撤销一次

如果发现撤销的时候进行了错误的撤销操作,希望把刚才做过的事情重做一次,可以按 ctrl r键进行重做

  • 查找、替换
/string         #查找指定字符串,按n向后查找下一个,按N向前查找下一个

/string\c       #查找指定字符串,不区分大小写,按n向后查找下一个,按N向前查找下一个

/string\C       #查找指定字符串,区分大小写,按n向后查找下一个,按N向前查找下一个

:s/old/new      #用new字符串替换当前行中第一次匹配达到的old字符串

:s/old/new/g    #用new字符串替换当前行中所有的old字符串

:n,ms/old/new   #第n行到第m行之间,用new字符串替换每一行中第一次匹配到的old字符串

:n,m/s/old/new/g #第n行到第m行之间,用new字符串替换每一行中所有匹配到的old字符串

:%s/old/new/g    #用new字符串替换文件中所有匹配到的old字符串

如果想要像windows上记事本查找替换一样,每次替换之前有是否替换的确认,只需要在替换命令后面加一个 c字符

整理常用的 vim 命令

上面的例子中, :%s/we/WE/gc 命令是把文件中所有的 we字符串全部替换成 WE字符串,每次替换之前人工确认,如果把命令中的 c字符去掉,就是自动全部替换功能了

  • 执行外部命令
:! cmd   #执行cmd命令
:r !cmd  #执行cmd命令,把命令的结果插入光标后面一行

整理常用的 vim 命令

上面例子中,输入 :! date 是在vim中执行 date命令,命令结果会显示在下面,再次按 ENTER键回到了vim

当输入 :r !date时,`date命令的结果插入到光标后面一行

  • 批量处理

在可视模式下可以对文件进行批量的操作,比如: 批量选中,批量修改

我们平常用的比较多的批量操作是块可视模式

v               #字符可视模式,以字符为单位选择
V 或 shift v     #行可视模式,以行为单位选择
ctrl v          #块可视模式,以块为单位选择

整理常用的 vim 命令

上面例子中,在vim中按 ctrl v进入块可视模式,在屏幕的左下角有显示 --可视 块-- 字样

接着通过 j k h l选中了第6行到第9行中,每一行的前三列这一块字符串

然后按 shift i切换到插入模式,把前三列字符串修改为 123,修改的时候只有第6行显示修改过,修改完之后连续按两次 esc键,前三列就全部变成了 123

紧接着,再次按 ctrl v进入快可视模式,选中第6行到第9行前两列,然后按 d键,就把前两列删除了

小结

本文介绍了vim的一些常见用法,掌握这些常见用法足够满足工作的需要了,关于vim的命令非常多,远远不止本文介绍的内容,更多的用法请参考vim文档

Original: https://www.cnblogs.com/wanng/p/vim-cmd-usage.html
Author: Linux开发那些事儿
Title: 整理常用的 vim 命令

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/607455/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 重新认识运维

    重新认识运维 背景 随着业务的发展,新技术的迭代,公司研发采用了微服务架构或是上云等等,这没有考虑运维成本和效率,带来运维极大的复杂性,让运维纯手工,苦不堪言,痛苦。从现象来看,运…

    Linux 2023年6月8日
    096
  • 让滚动条自动滚动到最底部(可用)

    代码: <body> </body> 需求: main高度不断增加,保持页面滚动条始终在底部 解决方案: $(function(){ ….//main&…

    Linux 2023年6月13日
    0105
  • EXCEL中vlookup函数的使用

    =LOOKUP(“座”,INDIRECT(“A1:A”&MATCH(E3,B1:B14,))) 这个公式中还嵌套了INDIR…

    Linux 2023年6月13日
    081
  • Linux常用命令

    基本操作 创建目录: mkdir xxx 删除目录: rm -rf xxx 切换目录: cd xxx,返回: cd – 创建文件: touch xxx.txt 复制文件: cp x…

    Linux 2023年6月8日
    0108
  • go操作redis

    package main import ( "fmt" "github.com/gomodule/redigo/redis" ) func …

    Linux 2023年5月28日
    068
  • Linux专项之Apache

    1.&#x865A;&#x62DF;&#x673A;&#x4E0A;&#x7F51; 1.安装软件(httpd) yum search ht…

    Linux 2023年6月14日
    085
  • Kubernetes后台数据库etcd:安装部署etcd集群,数据备份与恢复

    服务器版本 docker软件版本 CPU架构 CentOS Linux release 7.4.1708 (Core) Docker version 20.10.12 x86_64…

    Linux 2023年6月7日
    081
  • Centos7 离线安装K3s

    1、安装前准备 github地址:https://github.com/k3s-io/k3s/releases k3s二进制文件:k3s下载地址:github地址 / 百度网盘地址…

    Linux 2023年6月7日
    0133
  • 前端奇奇怪怪的CSS样式

    使用inline-block相当于将元素介于块级元素与行内元素之间,将换行符转换成了空格,因此各个元素之间会有空隙 各个元素没有间隙,且元素自身大小不会改变,若一行容不下,则会换行…

    Linux 2023年6月13日
    085
  • Linux上安装并启动tomcat

    1、下载tomcat安装包 官网链接:https://archive.apache.org/dist/tomcat/tomcat-7/v7.0.57/bin/ 2、将tomcat上…

    Linux 2023年6月6日
    0107
  • 005 Linux 命令三剑客之-sed

    grep:数据查找定位 awk:数据切片,数据格式化,功能最复杂 *sed:数据修改 三剑客各有所长,就从锅碗瓢盆一一开始吧! [En] The three swordsmen h…

    Linux 2023年5月27日
    080
  • 服务器部署 Vue 和 Django 项目的全记录

    本篇记录我在一个全新服务器上部署 Vue 和 Django 前后端项目的全过程,内容包括服务器初始配置、安装 Django 虚拟环境、python web 服务器 uWSGI 和反…

    Linux 2023年6月7日
    0101
  • 【C++基础】内存分区模型

    内存分区模型 C++程序在执行时,将内存大致划分为 4个区域 代码区:存放函数体的二进制代码,由操作系统进行管理 全局区:存放 全局变量和 静态变量以及 常量 栈区:由 编译器自动…

    Linux 2023年6月13日
    079
  • 笔记:Java集合框架(一)

    Java集合框架(一) Collection接口 继承结构 Iterator接口 Iterator接口定义了迭代器的基本方法: java;gutter:true; hasNext(…

    Linux 2023年6月14日
    067
  • Ubuntu常用命令

    Ubuntu(18.04)下更改用户名和主机名 更改主机名字: (1)修改hostname文件 这个文件中的内容是用来显示主机名的,修改这个文件后,立刻重启 (2)修改hosts文…

    Linux 2023年6月13日
    080
  • STM32CubeIDE学习记录(按键点灯工程)

    博主使用的开发板以及相关外设连接如下: 芯片型号为: STM32F103RCT6, 新建STM32CubeIDE项目 配置完成后会生成相应的文件并进入如下界面: 使用外部晶振时钟 …

    Linux 2023年6月14日
    0123
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球