Vim语法

Vim语法及插件

    • 常用
    • `Normal`模式
      • 移动
      • 删除
      • 修改
      • 查找
      • 复制粘贴
      • 撤销
    • `Insert`模式
      • 复制粘贴
    • `CMD`模式
      • 替换
    • `Visual`模式
    • 多文件间的转换
      • Buffer
      • Window
      • Tab
    • 文本对象
    • 补全


常用

课程链接

Vim中的指令可以灵活组合使用

:help 查找文档

切换为后台Ctrl + z;切换为前台fg

Ctrl + D打开候选列表


Normal模式

进入Vim,默认Normal模式或使用Esc进入Normal模式

移动

单词间移动
移动到下一个word/WORD开头 w / W (移动到下一个word/WORD结尾 e / E
移动到上一个word/WORD开头 b / B
word是指以非空白符分割的单词,WORD是指以空白符分割的单词。

行间搜索移动
使用 f{char}可以移动到{char}字符上,t{char}移动到{char}字符的前一位字符
多个{char}间的切换用; / , 表示下一个 / 上一个
f搜索到光标行尾间的字符,F搜索到光标行首间的字符。

行间快速移动
0移动到行首第一个字符,使用0w起到和^相同的作用(^移动到行首第一个非空白字符)
$移动到行尾(g_移动到行尾非空白字符)

页面移动
gg / G 移动到文件的开头 / 结尾,ctrl + o快速返回
移动到屏幕的开头H (head),中间M (middle),结尾L (lower)
Ctrl + u / Ctrl + f 上(upword) / 下(forward)翻页
zz 调整当前行到屏幕中间
:n 跳转到第n

删除

xd 删除选中部分,x可以用在一个字符上直接删除,d属于删除指令,要删除一个字符,需要dl
dw删除光标到单词的结尾,diw删除光标所在的单词,dd删除光标所在行,D 删除所在行光标之后的所有词
dt{char}删除光标到{char}的所有字符
d0 删除到行首,d$ 删除到行尾
2dd删除行,4x删除个字符。数字+命令 表示多次重复。
ggdG清空屏幕
. 模仿上一次删除操作

修改

r (replace) 替换一个字符,保持Normal模式; R 替换多个字符,保持Normal模式
s (subtitute) 删除当前字符,并进入Insert模式;S删除当前行,并进入Insert模式
c (change)
cw删除单词,并进入Insert模式;C删除光标到行尾,并进入Insert模式;
ci( 修改()中的内容,()也可以是{} [] <>,但是对于c++中的流操作符<<就不能使用ci<来修改其内容,因为是两个<相连,可以使用c%进行修改,但是光标要置于<后。

查找

/ / ? 进行前向 / 反向搜索
使用n / N 跳转到一个 / 一个
使用* / # 进行单词的前向 / 后向匹配

复制粘贴

y (yank)复制 yiw复制一个单词,yy复制一行,y0复制光标到行首
d (delete)剪切
p (put)粘贴,p粘贴到光标之后,P粘贴到光标之前

vim在复制、剪切过程中的文本内容是存在寄存器中,而不是系统剪切板。
xp :用x删除一个字符,将字符放到无名寄存器中,再使用p粘贴,实现字符对调。

对于寄存器的使用,通过:{register}可以指定寄存器,有多个寄存器,如az都可以设置为寄存器,可以作为剪贴板来使用。如"ayiw表示复制一个单词到寄存器a中,"bdd表示删除当前行到寄存器b中。
使用:reg a显示寄存器a中保存的内容
使用"bp表示粘贴寄存器b中的内容
""表示无名寄存器,默认就是用的无名寄存器,因此可以省略不写
"0表示复制专用寄存器,默认复制到无名寄存器时,也会复制到专用寄存器
"+表示系统剪贴板,用于和vim外进行交互用的寄存器

清理寄存器的内容 :let @"='',让无名寄存器的内容赋为''空字符

当在客户端进行复制后,在服务端进行粘贴时,无法使用寄存器进行交互,因此可以使用:set clipboard=unnamed设置服务器中的vim,再直接使用p来进行粘贴

颠倒两行:exe "normal! ddpk"

  • :exe :这是一个 Ex 命令,用于执行后面的字符串作为 Vim 命令。
  • "normal! ddpk":这是要执行的字符串。在这个命令中,"normal!" 是告诉 Vim 将后面的字符串作为普通模式下的按键操作来执行。
  • dd :删除当前行,并将其保存到剪贴板中。
  • pk:按下 p 键,将剪贴板中的内容(之前删除的行)粘贴到光标当前位置的上一行。

撤销

u撤销操作,U撤销某一行最近所有修改,Ctrl + R撤销u


Insert模式

i(insert)光标之插入,I插入
a(append)光标之插入,A插入
o(open a line below) 在下一行插入O在上一行插入

进入该模式后,ctrl + h 删除上一个字符,ctrl + w 删除上一个单词,ctrl + u 删除光标前当前行所有字符(同理于终端

可以使用 ctrl + cctrl + [,从 Insert 模式切换到 Normal 模式
可以使用 gi,从 Normal 模式切换到 Insert 模式中最后编辑的位置

复制粘贴

正常文本的复制粘贴ctrl + c ctrl + v
<ctrl + r>{register}对对应寄存器中的内容进行粘贴


CMD模式

通过 : 进入命令行模式

:w (write)写入
:wq (write quit)写入并退出
:vs (vertical split)竖直分屏
:sp (split)水平分屏
:set nu (set number)设置行号

替换

支持正则表达式
语法::[range]s[ubtitute]/{pattern}/{string}/[flags]

[range]表示范围,如10,20表示10到20行,%表示全部

{pattern}表示需要替换的文本

{string}表示替换后的文本

[flags]
g (global) 表示全局范围执行
c (confirm) 表示需要确认是否修改
n (number) 表示匹配到的次数,而不进行替换

:% s/a/b/g 把所有的a替换成b
:1,6 s/a/b/g 把1到6行的a替换成b
:1,6 s/a//n 1到6行中查找有多少个a。但可能会对a替换成空字符,可修改为:1,6 s/a/&/gn

使用正则表达式
:% s/\<a\>/b/g 把所有的单词a替换成b,而不替换含有a字符的单词


Visual模式

进行可视化选择
Normal模式输入v,进入visual选择。使用V选择整行,使用Ctrl + v进行块状选择。


多文件间的转换

Buffer

Buffer指打开的一个文件的内存缓冲区
修改时针对Buffer的内容修改,:w再将修改内容写入文件。
每个文件对应一个Buffer,使用:ls会列举当前缓冲区,再使用:b n跳转到第n个缓冲区。
:bpre :bnext :bfirst :blast 分别跳到对应的缓冲区中,或者用:b buffer_name 加上Tab补全来跳转。

通过:ls来获得缓冲区中对应文件的信息、编号,可以通过:b1跳到编号为1所对应文件的Buffer中去。
也可以用:e buffer_name打开对应的文件。

Window

WindowBuffer可视化的分割区域。
<Ctrl + w>v 垂直分割,同:vs
<Ctrl + w>s 水平分割,同:sp
<Ctrl + w>w 窗口间循环切换
<Ctrl + w>h 切换到左侧窗口,<Ctrl + w>H 将窗口移动左侧
<Ctrl + w>j 切换到下侧窗口,<Ctrl + w>J 将窗口移动下侧
<Ctrl + w>k 切换到上侧窗口,<Ctrl + w>K 将窗口移动上侧
<Ctrl + w>l 切换到右侧窗口,<Ctrl + w>L 将窗口移动右侧

Tab

Tab可以把Window组织为一个工作区


文本对象

可以快速操作一个单词、一个句子和一个段落等。
语法:[number]<command>[text object]

[number]表示次数
<command>表示命令,如d c y
[text object]表示要操作的文本对象,如w 单词,s句子,p段落


iw (inner word) viw表示选择当前单词,vi"表示选择"中的内容
aw (around word) vaw表示选择当前单词以及单词后的空格


一系列命令的集合:可以使用宏录制一系列操作,再用于回放这些操作,用于批量的编辑。

Normal模式下,使用q来开启录制,再使用q来结束录制。可以使用q{register},来指定对应的寄存器来存放指令。使用@{register}回放

如,有多行网址,要给每一行的网址加上双引号。

https://www.example1111.com
https://www.example22.com
http://www.example333.com
http://www.example4444.com
https://www.example55555.com
http://www.example666666.com
https://www.example7777777.com
http://www.example88.com
https://www.example99999.com
http://www.example1000000.com

qa 开启录制宏到a寄存器中
光标置于第一行,I" <ctrl + [> A" <ctrl + [> q ,其中I光标置于行首,插入"<ctrl + [>退出Insert模式,A插入到行尾,插入",退出Insert模式,q结束录制。 完成了一个
可以使用j@a,让下一行也通过宏完成指令。
还可以使用进入visual模式,VG选择其余所有行,使用:进入命令行模式,vim会显示:'<,'>,使用normal模式下的指令,输入normal @a。命令行整体为:'<,'>normal @a,即可完成操作。

整体修改只需
:1 qa I" <ctrl + [> A" <ctrl + [> q :2 VG :normal @a

"https://www.example1111.com"
"https://www.example22.com"
"http://www.example333.com"
"http://www.example4444.com"
"https://www.example55555.com"
"http://www.example666666.com"
"https://www.example7777777.com"
"http://www.example88.com"
"https://www.example99999.com"
"http://www.example1000000.com"

其实可以不使用宏也来完成该需求,VG先全选,输入:normal I",给所有行首加入",进入命令行模式:<Ctrl +p>输出上一步操作,将I"改为A"即可。
将宏的批量修改改成统一修改,由于录制宏中需要两次退出Insert模式,因此需要两次进入normal模式。


补全

常见补全
<Ctrl + n><Ctrl + p> 补全单词,在待补全选项中,可以通过使用操作选<Ctrl + n>下一个和 <Ctrl + p> 上一个,而不使用方向键来选择。
<Ctrl + x><Ctrl + f> 补全文件名
<Ctrl + x><Ctrl + o> 补全代码,需要开启文件类型检查,安装插件


vim-commands-cheat-sheet-by-pnap

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/22298.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

持之以恒,安之有度 | 持安科技2周年!

新征程 新未来 持安的同学们已经一起走进 第三个年头啦 近日&#xff0c;持安 北京 上海 深圳 所有公司成员齐聚一堂 共 同 庆 祝 持安科技 成立2周年 持安一体化零信任平台 &#xff0c;引领应用层零信任落地新局面 2021年&#xff0c;何艺&#xff08;持安创始人兼CE…

数据结构初阶--排序2

目录 前言快速排序思路hoare版本代码实现挖坑法代码实现前后指针法代码实现 快排优化三项取中法代码实现三指针代码实现 快排非递归代码实现 归并排序思路代码实现归并非递归代码实现 计数排序思路代码实现 前言 本篇文章将继续介绍快排&#xff0c;归并等排序算法以及其变式。…

Git常用命令及在Idea中如何使用创建分支等,详讲带图[保姆级]

文章目录 Git在Git命令行中执行下面命令:设置基本信息获取Git仓库Git 工作区 暂存区 版本库概念工作状态远程仓库操作分支操作标签分类 Idea中使用推送到远程仓库(提交并且推送)分支操作 Git 在Git命令行中执行下面命令: 设置基本信息 设置用户信息 git config --global use…

Transformer原理理解

本文介绍Transformer的基本原理&#xff0c;主要记录一下自己的学习过程。 论文&#xff1a;https://arxiv.org/abs/1706.03762 参考&#xff1a; http://jalammar.github.io/illustrated-transformer/https://zhuanlan.zhihu.com/p/338817680https://blog.csdn.net/longxinc…

复习第四课 C语言-分支语句和循环

目录 【1】字符输入输出 【2】C语言下的垃圾字符回收 【3】分支语句 【4】循环 练习&#xff1a; 【1】字符输入输出 按字符的输入输出 int getchar(void); 功能&#xff1a;从终端输入一个字符 参数&#xff1a;无 返回值&#xff1a;输入字符的ASCII值int putchar(int…

使用python get post数据 http https

0、目的 目的比较简单&#xff0c;测试&#xff0c;使用python来提交数据是非常简洁的&#xff0c;修改代码也容易&#xff0c;除了做人工智能&#xff0c;本身也是一个非常好的测试端工具 1、简单的post 一个简单的示例程序&#xff0c;将 headers 内容置为’application/j…

2023华为产品测评官-开发者之声 | 华为云CodeArts征文活动,多重好礼邀您发声!

"2023华为产品测评官&#xff0d;开发者之声"活动激发了众多开发者和技术爱好者的热情&#xff0c;他们纷纷递交了精心编写的产品测评报告。活动社群充满活力&#xff0c;参与者们热衷于交流讨论&#xff0c;互相帮助解决问题&#xff0c;一起探索云技术的无限可能。…

【机器人模拟-02】 模拟移动机器人设置里程计

一、说明 在本教程中,我将向您展示如何设置移动机器人的测程。本教程是“机器人模拟”指南中的第二个教程。测量位移是仿真中的重要内容,设置测程的官方教程在此页面上,但我将逐步引导您完成整个过程。 您可以在此处获取此项目的完整代码。让我们开始吧! 二、ROS 2 中的里程…

最火爆的大模型框架LangChain七大核心及案例剖析上(三)

最火爆的大模型框架LangChain七大核心及案例剖析上 10.6 GPT内容创建者案例详细剖析 我们回到“LangChain GPT内容创建者”案例,一行一行的解析代码,为了更好的看这个代码,先看一下它具体执行的整个日志过程,然后再看一下代码的部分。 首先,在控制台执行脚本,启动web页面…

微信小程序(二)

目录 1、input标签 一、表单绑定 1、数据绑定 2、输入获取 二、网络请求 1、介绍 2、注意 3、使用 4、基于Promise封装 三、自定义组件 1、创建 2、父向子组件通信 3、子向父组件通信 4、生命周期 四、vant weapp组件库 1、配置 2、使用 进入本章前的拓展&#…

用ChatGPT解析Wireshark抓取的数据包样例

用Wireshark抓取的数据包&#xff0c;常用于网络故障排查、分析和应用程序通信协议开发。其抓取的分组数据结果为底层数据&#xff0c;看起来比较困难&#xff0c;现在通过chatGPT大模型&#xff0c;可以将原始抓包信息数据提交给AI进行解析&#xff0c;本文即是进行尝试的样例…

河钢数字项目管理部负责人杨笑瑾受邀为第十二届中国PMO大会演讲嘉宾

河钢数字技术股份有限公司项目管理部负责人杨笑瑾女士受邀为由PMO评论主办的2023第十二届中国PMO大会演讲嘉宾&#xff0c;演讲议题&#xff1a;项目群管理赋能组织变革。大会将于8月12-13日在北京举办&#xff0c;敬请关注&#xff01; 议题简要&#xff1a; 谈到组织变革自然…