当前位置: 首页 > news >正文

【vim 学习系列文章 2 - vim 常用插件配置】

文章目录

    • 1.1 vim 常用插件
      • 1.1.1 vim 插件 Pathogen 管理
      • 1.1.2 vim 常用插件推荐
      • 1.1.3 vim Leaderf
      • 1.1.4 vim ripgrep 工具
      • 1.1.5 vim Leaderf 配合 rg
      • 1.1.6 vim autocmd 配置
    • 1.2 其它类型文件 vimrc 配置
      • 1.2.1 System Verilog vimrc 配置

上篇文章:vim 学习系列文章 1 - vim 常用配置
下篇文章:vim 学习系列文章 3 - vim 选中、删除、复制、修改引号或括号内的内容

1.1 vim 常用插件

1.1.1 vim 插件 Pathogen 管理

我一般使用 Pathogen 管理器安装 vim 插件, 那么什么是 Pathogen 呢? Pathogen 一般作为 vim 新手的第一个插件,用来统一管理 vim 插件包。(官方解释)非常容易地管理你的 ‘runtimepath’ , 在实际项目中,vim-pathogen 可以在它的私有文件夹下非常轻松地安装插件和管理运行时文件。

Pathogen 安装
复制以下代码到你的终端

mkdir -p ~/.vim/autoload ~/.vim/bundle && \
curl -LSso ~/.vim/autoload/pathogen.vim https://gitee.com/jojo2019007/vim-pathogen/raw/master/autoload/pathogen.vim

添加以下代码到 ~/.vimrc 文件中

execute pathogen#infect()
syntax on
filetype plugin indent on

此时 Pathogen 已经成功安装,可以安装以下插件测试下

cd ~/.vim/bundle && 
git clone https://github.com/tpope/vim-sensible.git

1.1.2 vim 常用插件推荐

目前我主要使用以下 vim 插件:

CondingCos:~/.vim$ ls
autoload  bundle  doc  plugin  README.mdCondingCos:~/.vim/bundle$ ls
autoload_cscope.vim  ctrlp.vim  fzf.vim  nerdtree  supertab  undotree  
vim-colors-solarized  vim-commentary  vinarise.vim  LeaderF  ripgrep

1.1.3 vim Leaderf

由于我使用的 git submoudle 管理本地 vim 插件,首先使用 git submodule add 命令将远程项目 Leaderf 和 ripgrep 克隆到本地 ~/.vim/bundle 文件夹下,具体步骤如下:

CodingCos@developer-numb-1:~/.vim/bundle$
CodingCos@developer-numb-1:~/.vim/bundle$ git submodule add git@github.com:BurntSushi/ripgrep.git
Cloning into '/mnt/user_home/CodingCos/.vim/bundle/ripgrep'...
remote: Enumerating objects: 10128, done.
remote: Counting objects: 100% (181/181), done.
remote: Compressing objects: 100% (103/103), done.
remote: Total 10128 (delta 115), reused 123 (delta 78), pack-reused 9947
Receiving objects: 100% (10128/10128), 4.35 MiB | 3.09 MiB/s, done.
Resolving deltas: 100% (6866/6866), done.
CodingCos@developer-numb-1:~/.vim/bundle$
CodingCos@developer-numb-1:~/.vim/bundle$ git submodule add git@github.com:Yggdroot/LeaderF.git
Cloning into '/mnt/user_home/CodingCos/.vim/bundle/LeaderF'...
remote: Enumerating objects: 7616, done.
remote: Counting objects: 100% (778/778), done.
remote: Compressing objects: 100% (299/299), done.
remote: Total 7616 (delta 435), reused 692 (delta 379), pack-reused 6838
Receiving objects: 100% (7616/7616), 2.03 MiB | 1.68 MiB/s, done.
Resolving deltas: 100% (4584/4584), done.
CodingCos@developer-numb-1:~/.vim/bundle$
CodingCos@developer-numb-1:~/.vim/bundle$ git submodule status43433aa8dad1601acf923d3c25fa3325799508aa LeaderF (v1.23-131-g43433aa)26f428f400d96d25a9d633e6314f6e1760923db1 autoload_cscope.vim (0.5)564176f01d7f3f7f8ab452ff4e1f5314de7b0981 ctrlp.vim (1.79-29-g564176f)d5f1f8641b24c0fd5b10a299824362a2a1b20ae0 fzf.vim (d5f1f86)eed488b1cd1867bd25f19f90e10440c5cc7d6424 nerdtree (6.10.16-1-geed488b)bc5504932764d8d4735bf955f6f7e04a95f151b8 ripgrep (grep-0.2.10-55-gbc55049)f0093ae12a9115498f887199809a6114659fc858 supertab (2.1-41-gf0093ae)08e259be24d4476c1ee745dc735eefd44f90efdc undotree (rel_4.2-147-g08e259b)528a59f26d12278698bb946f8fb82a63711eec21 vim-colors-solarized (heads/master)3654775824337f466109f00eaf6759760f65be34 vim-commentary (v1.3-20-g3654775)84dd647932fbd029310cca31f417c42f56d60547 vinarise.vim (ver.1.0-140-g84dd647)

note: 需要登陆自己的 github,再使用 git submodule add, 否是 执行不成功

执行完上面命令后,需要将对应的文件推到 自己的 github

CodingCos@developer-numb-1:~/.vim$ git st .
On branch main
Your branch is up to date with 'origin/main'.Changes to be committed:(use "git reset HEAD <file>..." to unstage)modified:   .gitmodulesnew file:   bundle/LeaderFnew file:   bundle/ripgrep
CodingCos@developer-numb-1:~/.vim$ git commit -a -s
CodingCos@developer-numb-1:~/.vim$ git branch -a
* mainremotes/origin/HEAD -> origin/mainremotes/origin/main
CodingCos@developer-numb-1:~/.vim$ git push origin HEAD:origin/main
Counting objects: 4, done.
Delta compression using up to 64 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 549 bytes | 549.00 KiB/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Resolving deltas: 100% (3/3), completed with 3 local objects.
To github.com:xxxx/.vim.git

note: 使用Leaderf之前需要先安装 ripgrep

1.1.4 vim ripgrep 工具

ripgrep(简称 rg),是一个用 Rust 实现的命令行搜索工具,可以通过正则来搜索当前的目录。默认情况下 ripgrep 会遵循 .gitignore 的内容,并且自动跳过隐藏的文件目录,以及二进制文件

可以通过下面命令进行安装:

sudo apt-get install ripgrep

用法

  • 最直接的用法
$ rg 'device' ./

会显示当前目录下的搜索内容,会打印出文件名及关键字出现的行数。
和 grep 命令类似,也有三个打印出上下行的选项:
-A NUM 打印匹配行后面 after N
-B NUM 打印匹配行前面 before N
-C NUM 打印匹配行前后 N

  • 用正则表达式搜索
    使用 -e REGEX 来指定正则表达式:
rg -e "*device" -C2
  • 搜索所有内容包括 gitignore 和隐藏文件
    默认 rg 会忽略 .gitignore 和隐藏文件,可以使用 -uu 来查询所有内容:
rg -uu "device" ./
  • 显示匹配的次数
    使用 -c 来显示匹配的次数:
rg -c "device" ./

结果会在文件名后面增加一个次数。

  • 搜索指定的文件类型
    可以使用 -t type 来指定文件类型, 可以用 -T 来不搜索某种类型文件, 比如:只搜索 cpp 文件 (-t) :
rg -w 'device' ./ -tcpp

所支持的文件类型可以通过下面命令来查看

rg --type-list

看到这里,有些读者可能要问假如我要在两个文件类型中查找呢,这个时候 -t 参数就无法满足了,需要引入新的 -g 参数,man rg 看一下 -g 就知道该选项后面跟着一个 GLOB,正则表达式,包括或者去除一些文件或者目录。比如要在 c 文件或者 cpp 文件中查找 “device” 关键字:

rg -g "*.{c,cpp}" "device"
  • 显示不包含关键字的行
    使用选项 -v 来显示不包含关键字的行, 比如显示不含 “device” 的行:
rg -v "device" -tcpp ./
  • 忽略大小写(-i)

  • 只打印包含匹配内容的文件名
    使用 -l 来打印文件名:

rg -l -w "device" 

相反的是如果要打印没有匹配内容的文件名:

rg --files-without-match -w "device" ./

1.1.5 vim Leaderf 配合 rg

再 vim 中运行 LeaderF 之后的操作
可以通过 help leaderf-prompt 查看所有的操作, 比较常用的列在下面:

<C-C>, <ESC> : 退出
<C-R> : 在模糊查询和正则表达式模式间切换
<C-F> : 在全路径搜索和名字搜索模式间切换
<Tab> : 切换成normal模式
<C-V>, <S-Insert> : 从剪切板里copy字符串进行查询
<C-U> : 清除已经打出的字符
<C-J>, <C-K> : 在结果列表中移动
<Up>, <Down> : 从历史记录里调出上一次/下一次的输入pattern
<2-LeftMouse> or <CR> : 打开在光标处的文件或者被选择的多个文件
<F5>  : 刷新缓存
<C-P> : 预览选中结果
<C-Up> : 在预览popup窗口里滚动向上
<C-Down> : 在预览popup窗口里滚动向下

一旦按 tab, 则会进入 normal 模式, 可以使用大部分 normal 模式命令。

1.1.6 vim autocmd 配置

http://yyq123.github.io/learn-vim/learn-vi-49-01-autocmd.html

1.2 其它类型文件 vimrc 配置

1.2.1 System Verilog vimrc 配置

请参考:https://blog.csdn.net/weixin_42916702/article/details/117818186

上篇文章:vim 学习系列文章 1 - vim 常用配置
下篇文章:vim 学习系列文章 3 - vim 选中、删除、复制、修改引号或括号内的内容

推荐阅读
https://www.jianshu.com/p/9000cd49822c
https://retzzz.github.io/dc9af5aa/

相关文章:

【vim 学习系列文章 2 - vim 常用插件配置】

文章目录 1.1 vim 常用插件1.1.1 vim 插件 Pathogen 管理1.1.2 vim 常用插件推荐1.1.3 vim Leaderf1.1.4 vim ripgrep 工具1.1.5 vim Leaderf 配合 rg1.1.6 vim autocmd 配置 1.2 其它类型文件 vimrc 配置1.2.1 System Verilog vimrc 配置 上篇文章&#xff1a;vim 学习系列文章…...

【外卖系统】修改菜品

需求分析 在菜品管理列表页面点击修改按钮&#xff0c;跳转到修改页面&#xff0c;在修改页面回显菜品相关信息并进行修改&#xff0c;在最后点击确定按钮完成修改操作 代码设计 页面发送ajax请求&#xff0c;请求服务端获取分类数据&#xff0c;用于菜品分类下拉框中数据显…...

【暑期每日一练】 day11

目录 选择题 &#xff08;1&#xff09; 解析&#xff1a; &#xff08;2&#xff09; 解析&#xff1a; &#xff08;3&#xff09; 解析&#xff1a; &#xff08;4&#xff09; 解析&#xff1a; &#xff08;5&#xff09; 解析&#xff1a; 编程题 题一 描…...

神经概率语言模型

本文主要参考《A Neural Probabilistic Language Model》这是一篇很重要的语言模型论文,发表于2003年。主要贡献如下: 提出了一种基于神经网络的语言模型&#xff0c;是较早将神经网络应用于语言模型领域的工作之一&#xff0c;具有里程碑意义。采用神经网络模型预测下一个单词…...

什么是shadow DOM?

Shadow DOM&#xff08;影子DOM&#xff09;是一种用于在Web组件中封装HTML、CSS和JavaScript的技术。它是Web组件的一个重要特性&#xff0c;旨在将组件的结构、样式和行为封装在一个独立的、隔离的DOM树中&#xff0c;从而与主文档的DOM树相互隔离。 传统的Web开发中&#x…...

我的 365 天创作纪念日

✅作者简介&#xff1a;人工智能专业本科在读&#xff0c;喜欢计算机与编程&#xff0c;写博客记录自己的学习历程。 &#x1f34e;个人主页&#xff1a;小嗷犬的个人主页 &#x1f34a;个人网站&#xff1a;小嗷犬的技术小站 &#x1f96d;个人信条&#xff1a;为天地立心&…...

spark-sql : “java.lang.NoSuchFieldError: out“ 异常解决

异常现象 at java.lang.reflect.Method.invoke(Method.java:498)at org.apache.spark.deploy.JavaMainApplication.start(SparkApplication.scala:52)at org.apache.spark.deploy.SparkSubmit.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:847)at org.apac…...

Node.js入门笔记(包含源代码)以及详细解析

Node.js 入门笔记源码 01、如何在终端中执行js 文件 目标&#xff1a;将下面的代码语句在中断中执行 代码演示&#xff1a; console.log(Hello World)for (let i 0;i < 3;i) {console.log(6)}方法&#xff1a;在文件上右击打开在终端中执行&#xff0c;然后输入node空格 输…...

windows自动化点击大麦app抢购、捡漏,仅支持windows11操作系统

文章目录 必要条件程序运行必要条件 确保windows11版本操作系统,如果不是可以通过镜像升级为windows11如果已经是windows11操作系统,确保更新到最新版本 修改系统所在时区,将国家或地区改为美国 开启虚拟化 勾选Hyper-V,如果没有则不需要勾选 勾选虚拟机平台 勾选完毕,点…...

vue 拦截 v-html 中 a 标签 href 跳转

记录 template 中 给需要 拦截的 代码片段加上click 方法 click“targetNodeNameClick” <p class"message-content message-content-text" v-html"replaceURLWithHTMLLinks(getText(message))" click"targetNodeNameClick"></p>然…...

分布式id、系统id、业务id以及主键之间的关系

推荐 连分布式ID都理解不了&#xff0c;你是刚培训出来冒充面试官的吧 1 分布式id、系统id、业务id以及主键之间的关系 分布式ID、系统ID、业务ID和主键的关系&#xff1a; 分布式ID&#xff1a;在分布式系统中&#xff0c;由于存在多个独立的节点&#xff0c;为了保证每个节…...

设计模式七:适配器模式(Adapter Pattern)

适配器模式&#xff08;Adapter Pattern&#xff09;是一种结构型设计模式&#xff0c;用于将一个类的接口转换成客户端所期望的另一个接口。它允许不兼容的接口能够协同工作。 适配器模式涉及角色&#xff1a; 目标接口&#xff08;Target Interface&#xff09;&#xff1a…...

数据结构---队列

(一)队列之基础补充 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 —— 百科 「队列 Queue」是一种…...

chatGPT在软件测试中应用方式有哪些?

ChatGPT可以在软件测试中以以下方式应用&#xff1a; 1. 自动化对话测试&#xff1a;ChatGPT可以用于自动化对话测试&#xff0c;模拟用户与软件系统进行实时对话。它可以扮演用户的角色&#xff0c;向系统发送各种类型的指令和请求&#xff0c;并验证系统的响应是否符合预期。…...

chatgpt 接口使用(一)

使用api实现功能 参考链接&#xff1a;https://platform.openai.com/examples 安装库&#xff1a; pip3 install openai 例如&#xff1a; import os import openaiopenai.api_key os.getenv("OPENAI_API_KEY") response openai.ChatCompletion.create(model&q…...

【个人笔记】Linux 服务管理两种方式service和systemctl

service命令与systemctl 命令 service 命令与传统的 SysVinit 和 Upstart 初始化系统相关。较早期的 Linux 发行版&#xff08;如早期的 Ubuntu、Red Hat 等&#xff09;使用了这些初始化系统。service 命令用于启动、停止、重启和查询系统服务的状态。虽然许多现代 Linux 发行…...

HCIP中期考试实验

考试需求 1、该拓扑为公司网络&#xff0c;其中包括公司总部、公司分部以及公司骨干网&#xff0c;不包含运营商公网部分。 2、设备名称均使用拓扑上名称改名&#xff0c;并且区分大小写。 3、整张拓扑均使用私网地址进行配置。 4、整张网络中&#xff0c;运行OSPF协议或者BGP…...

【WebRTC---源码篇】(二十二)WebRTC的混音处理

音频混音主力 音频混音主体主要通过(重采样) + (混音)为主 音频重采样 内容实现是在webrtc::voe中实现的,下面来对重采样全流程逐一分析 。 void RemixAndResample(const AudioFrame& src_frame,//源音频数据帧PushResampler<int16_t>* resampler,//重采样对…...

MTK system_server 卡死导致手机重启案例分析

和你一起终身学习&#xff0c;这里是程序员Android 经典好文推荐&#xff0c;通过阅读本文&#xff0c;您将收获以下知识点: 一、MTK AEE Log分析工具二、AEE Log分析流程三、system_server 卡死案例分析及解决 本文主要针对 Exception Type: system_server_watchdog , system_…...

加强 Kubernetes 能力:利用 CRD 定义多版本资源的实现方式

姚灿武&#xff0c;Rancher 中国研发工程师&#xff0c;拥有 7 年云计算领域经验&#xff0c;热衷开源技术&#xff0c;在云原生相关技术领域拥有丰富的开发和实践经验。 CRD&#xff0c;即自定义资源定义&#xff08;Custom Resource Definition&#xff09;&#xff0c;是 Ku…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

工业安全零事故的智能守护者:一体化AI智能安防平台

前言&#xff1a; 通过AI视觉技术&#xff0c;为船厂提供全面的安全监控解决方案&#xff0c;涵盖交通违规检测、起重机轨道安全、非法入侵检测、盗窃防范、安全规范执行监控等多个方面&#xff0c;能够实现对应负责人反馈机制&#xff0c;并最终实现数据的统计报表。提升船厂…...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

第25节 Node.js 断言测试

Node.js的assert模块主要用于编写程序的单元测试时使用&#xff0c;通过断言可以提早发现和排查出错误。 稳定性: 5 - 锁定 这个模块可用于应用的单元测试&#xff0c;通过 require(assert) 可以使用这个模块。 assert.fail(actual, expected, message, operator) 使用参数…...

代码规范和架构【立芯理论一】(2025.06.08)

1、代码规范的目标 代码简洁精炼、美观&#xff0c;可持续性好高效率高复用&#xff0c;可移植性好高内聚&#xff0c;低耦合没有冗余规范性&#xff0c;代码有规可循&#xff0c;可以看出自己当时的思考过程特殊排版&#xff0c;特殊语法&#xff0c;特殊指令&#xff0c;必须…...

打手机检测算法AI智能分析网关V4守护公共/工业/医疗等多场景安全应用

一、方案背景​ 在现代生产与生活场景中&#xff0c;如工厂高危作业区、医院手术室、公共场景等&#xff0c;人员违规打手机的行为潜藏着巨大风险。传统依靠人工巡查的监管方式&#xff0c;存在效率低、覆盖面不足、判断主观性强等问题&#xff0c;难以满足对人员打手机行为精…...

Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)

引言 工欲善其事&#xff0c;必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后&#xff0c;我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集&#xff0c;就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...

Chrome 浏览器前端与客户端双向通信实战

Chrome 前端&#xff08;即页面 JS / Web UI&#xff09;与客户端&#xff08;C 后端&#xff09;的交互机制&#xff0c;是 Chromium 架构中非常核心的一环。下面我将按常见场景&#xff0c;从通道、流程、技术栈几个角度做一套完整的分析&#xff0c;特别适合你这种在分析和改…...

高防服务器价格高原因分析

高防服务器的价格较高&#xff0c;主要是由于其特殊的防御机制、硬件配置、运营维护等多方面的综合成本。以下从技术、资源和服务三个维度详细解析高防服务器昂贵的原因&#xff1a; 一、硬件与技术投入 大带宽需求 DDoS攻击通过占用大量带宽资源瘫痪目标服务器&#xff0c;因此…...