Vim神兵:精通自定义补全规则

标题:Vim神兵:精通自定义补全规则

摘要

Vim作为Linux上最强大的文本编辑器之一,其补全功能可以极大提高编码效率。本文将详细探讨如何在Vim中自定义补全规则,包括基本的补全设置、使用Vim脚本扩展补全功能,以及如何利用第三方插件增强补全能力。

1. 引言

Vim的补全功能可以帮助用户快速完成代码编写,支持文件名、命令、变量等多种类型的补全。

2. Vim补全基础

Vim的补全机制包括:

  • 单词补全:基于已有文本的单词补全。
  • 全词补全:补全整个单词。
  • 定义补全:补全变量和函数定义。

3. Vim补全选项设置

通过设置Vim的选项,可以开启或调整补全行为:

  • set complete+=k:使用当前文件中的单词进行补全。
  • set complete+=kspell:使用拼写建议进行补全。

4. 使用Vim脚本自定义补全

Vim允许用户通过脚本编写自定义补全函数:

function! MyCustomComplete(findstart, base)if a:findstart" 计算补全开始位置let line = getline('.')let start = col('.') - 1while start > 0 && line[start - 1] =~ '\a'let start -= 1endwhilereturn startelse" 基于基础进行补全return sort(['item1', 'item2', 'item3'])endif
endfunction

在Vim配置文件中设置补全函数:

set completefunc=MyCustomComplete

5. Vim补全的触发方式

  • 自动触发:在输入过程中自动弹出补全菜单。
  • 手动触发:使用Ctrl-NCtrl-P在插入模式下触发补全。

6. 利用第三方插件增强补全

许多Vim插件可以提供更智能的补全功能,如YouCompleteMe、neocomplete等。

7. 代码示例

以下是使用Vim脚本实现简单的自定义补全的示例:

" 配置 Vim 以使用自定义补全函数
augroup custom_completeautocmd!autocmd FileType python call SetPythonComplete()autocmd FileType javascript call SetJavaScriptComplete()
augroup ENDfunction! SetPythonComplete()setlocal omnifunc=pythoncomplete#Complete
endfunctionfunction! SetJavaScriptComplete()setlocal omnifunc=javascriptcomplete#CompleteJS
endfunction

这些函数根据文件类型设置Omni补全函数。

8. 性能优化

自定义补全可能会影响Vim的性能,优化方法包括:

  • 减少补全函数的复杂性。
  • 使用缓存存储重复查询的结果。

9. 结论

通过自定义补全规则,Vim可以成为一个更加强大的开发工具。本文提供了自定义补全的基础知识和一些实用技巧,帮助用户提升Vim的使用效率。

参考文献

  • Vim官方文档::help ins-completion
  • “Practical Vim” by Drew Neil

请注意,本文的代码示例仅用于演示Vim自定义补全的基本方法。在实际应用中,应根据具体需求和上下文进行调整。正确使用Vim的补全功能可以显著提高文本编辑和编程的速度。

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

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

相关文章

大模型微调实战之基于星火大模型的群聊对话分角色要素提取挑战赛:Task01:跑通Baseline

目录 0 背景1 环境配置1.1 下载包1.2 配置密钥1.3 测试模型 2 解决问题2.1 获取数据2.2 设计Prompt2.2 设计处理函数2.3 开始提取 附全流程代码 0 背景 Datawhale AI夏令营第二期开始啦,去年有幸参与过第一期,收获很多,这次也立马参与了第二…

VMware ESXi 技术

目录 一、VMware ESXi安装 1. 在VMware WorkStation中创建一台虚拟机 2. 进入VMware ESXi控制台 3. 配置VMware ESXi网络 二、使用Web网页端登录管理ESXi 1. 分配许可证密钥(选做) 2. 管理ESXi 三、VMware ESXi控制台 1. 创建虚拟机 2. 定制虚拟…

Webpack: 开发 PWA、Node、Electron 应用

概述 毋庸置疑,对前端开发者而言,当下正是一个日升月恒的美好时代!在久远的过去,Web 页面的开发技术链条非常原始而粗糙,那时候的 JavaScript 更多用来点缀 Web 页面交互而不是用来构建一个完整的应用。直到 2009年5月…

LINUX操作系统:Mx Linux,用虚拟机VMware Workstation安装体验

需求说明: 操作系统目前流行有Windows、Linux、Unix等,中国人应该要知道国有操作系统,也要支持国产操作系统,为了更好支持国产操作系统,我们也要知己知彼,那么今天就来体验一把操作系统Mx_Linux_23.2的安装…

分享一个下载windows系统镜像包的网站

下载各种操作系统(比如Windows、Linux、MacOS等)比较快的镜像站点,我尝试过这个不错,提供了BT连接,可以用迅雷软件下载,速度很快的! 入口地址:NEXT, ITELLYOU 1)打开网站…

[XYCTF新生赛2024] pwn

用了一周来复现crypto部分(不能算是复现,拿着 糖醋小鸡块的WP一点点学了下)。 两天时间复现PWN部分。相对来说PWN比密码这块要简单,不过ARM,MIPS懒得学了,跳过。 malloc_flag 题目先打开flag将建0x100的块,然后把flag读入再fre…

[深度学习] Transformer

Transformer是一种深度学习模型,最早由Vaswani等人在2017年的论文《Attention is All You Need》中提出。它最初用于自然语言处理(NLP)任务,但其架构的灵活性使其在许多其他领域也表现出色,如计算机视觉、时间序列分析…

MySQL高级-SQL优化- limit优化(覆盖索引加子查询)

文章目录 0、limit 优化0.1、从表 tb_sku 中按照 id 列进行排序,然后跳过前 9000000 条记录0.2、通过子查询获取按照 id 排序后的第 9000000 条开始的 10 条记录的 id 值,然后在原表中根据这些 id 值获取对应的完整记录 1、上传5个sql文件到 /root2、查看…

libctk shared library的设计及编码实践记录

一、引言 1.1 <libctk>的由来 1.2 <libctk>的设计理论依据 1.3 <libctk>的设计理念 二、<libctk>的依赖库 三、<libctk>的目录说明 四、<libctk>的功能模块及使用实例说明 4.1 日志模块 4.2 mysql client模块 4.3 ftp client模块 4…

鸿蒙开发设备管理:【@ohos.geolocation (位置服务)】

位置服务 说明&#xff1a; 本模块首批接口从API version 7开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import geolocation from ohos.geolocation;geolocation.on(‘locationChange’) on(type: ‘locationChange’, request: L…

安卓开发自定义时间日期显示组件

安卓开发自定义时间日期显示组件 问题背景 实现时间和日期显示&#xff0c;左对齐和对齐两种效果&#xff0c;如下图所示&#xff1a; 问题分析 自定义view实现一般思路&#xff1a; &#xff08;1&#xff09;自定义一个View &#xff08;2&#xff09;编写values/attrs.…

poi-tl 生成 word 文件(插入文字、图片、表格、图表)

文章说明 本篇文章主要通过代码案例的方式&#xff0c;展示 poi-tl 生成 docx 文件的一些常用操作&#xff0c;主要涵盖以下内容 &#xff1a; 插入文本字符&#xff08;含样式、超链接&#xff09;插入图片插入表格引入标签&#xff08;通过可选文字的方式&#xff0c;这种方…

俄罗斯防空系统

俄罗斯的S系列防空系统是一系列先进的地对空导弹系统&#xff0c;旨在防御各类空中威胁&#xff0c;包括飞机、无人机、巡航导弹和弹道导弹。以下是几种主要的S系列防空系统&#xff1a; 1. **S-300系统**&#xff1a; - **S-300P**&#xff1a;最早期的版本&#xff0c;用…

翻译造句练习

翻译练习 翻译 1&#xff1a;经常做运动会提高人的自信 翻译 2&#xff1a;教学的质量对学生成绩有很大的影响。 翻译 3&#xff1a;家长和老师应该努力去减少小孩看电视的时间。 翻译 4&#xff1a;经济的下滑&#xff08;economic slowdown&#xff09;导致失业率的上升 翻译…

大模型和数据库最新结合进展

写在前面 本文主要内容是上次接受 infoQ 访谈&#xff0c;百度智能云朱洁老师介绍了大模型和 AI 结合相关话题&#xff0c;这次整体再刷新下&#xff0c;给到对这个领域感兴趣的同学。 当前&#xff0c;百度智能云云数据库特惠专场开始&#xff01;热销规格新用户免费使用&am…

Android中ViewModel+LiveData+DataBinding的配合使用(kotlin)

Android 中 ViewModel、LiveData 和 Data Binding 的配合使用&#xff08;Kotlin&#xff09; 摘要 本文将介绍如何在 Android 开发中结合使用 ViewModel、LiveData 和 Data Binding 进行数据绑定和状态更新。我们将详细探讨这三者之间的关系&#xff0c;并展示如何在 Kotlin…

最逼真的简易交通灯设计

最逼真的简易交通灯设计 需要资料的请在文章末尾获取&#xff08;有问题可以私信我哦~~&#xff09; 01 资料内容 Proteus仿真文件程序源码实物制作&#xff0c;代码修改&#xff0c;功能定制&#xff08;需额外收费&#xff0c;价格实惠&#xff0c;欢迎咨询&#xff09; …

实验场:在几分钟内使用 Elasticsearch 进行 RAG 应用程序实验

作者&#xff1a;来自 Elastic Joe McElroy, Serena Chou 什么是 Playground&#xff08;实验场&#xff09;&#xff1f; 我们很高兴发布我们的 Playground 体验 —- 一个低代码界面&#xff0c;开发人员可以在几分钟内使用自己的私人数据探索他们选择的 LLM。 在对对话式搜…

41割队伍

上海市计算机学会竞赛平台 | YACSYACS 是由上海市计算机学会于2019年发起的活动,旨在激发青少年对学习人工智能与算法设计的热情与兴趣,提升青少年科学素养,引导青少年投身创新发现和科研实践活动。https://www.iai.sh.cn/problem/387 题目描述 给定 𝑛n 个数字 𝑎1,�…

一周小计(1):实习初体验

实习的第一周&#xff0c;从最开始的配环境做好准备工作&#xff0c;到拉项目熟悉项目&#xff0c;然后自己去写需求&#xff0c;每一步都有很大收获&#xff0c;得到很多人帮助真的好感谢&#xff0c;以下是个人这几天的记录与感想。 &#xff08;这个其实是我写的周报&#x…