Neovim+ctag浏览、编辑源代码

Neovim+ctag浏览、编辑源代码

一 配置安装vim及 ctags

vim应该可以不用装,直接装neovim,这里我是先装了vim再装的neovim

Ctags必须装,后面用neovim +telescope索引函数时才有效

vim复制系统粘贴板:vim输入模式下,按shift+insert即可

sudo apt-get install vim

sudo apt-get install ctags

2配置 ctags kernel源码目录在/home/yanhongfei/vimtest ,即为执行ctags -R的目录

sudo vim /etc/vim/vimrc

set tags=tags

set autochdir

3 配置vim

注:只对各个用户在自己的当前目录下的.vimrc修改的话,修改内容只对本用户有效,要想全部有效,可以修改/etc/vim/vimrc.

1.apt-get install vim-full

2.设置/etc/vim/vimrc加上下面语 :

“语法高亮度显示

syntax on

“去掉有关vi一致性模式,避免 前版本的一些bug和局限

set nocompatible

“显示行号

set number

“检测文件的类型

filetype on

“记录历史的行数

 set history=1000

“背景使用黑色

set background=dark

“vim使用自动对起,也就是把当前行的对起格式应用到下一行

 set autoindent

“依据上面的对起格式,智能的选择对起方式,对于类似C语言编

set smartindent

“设置Windows风格的C/C++自动缩进,第一行设置tab键为4个空格,第二行设置当行之间交错时使用4个空格

set tabstop=4

set shiftwidth=4

“设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号

set showmatch

“去除vim的GUI版本中的toolbar

set guioptions-=T

“在编辑过程中,在右下角显示光标位置的状态行

set ruler

“默认情况下,寻找匹配是高亮度显示的,该设置关闭高亮显示

set nohls

“使用此设置会快速找到答案,当你找要匹配的单词时,别忘记回车

set incsearch

“如果没有下列行,加上吧

if &term==”xterm”

set t_Co=8

set t_Sb=^[[4%dm

set t_Sf=^[[3%dm

Endif

4 cd /home/yanhongfei/vimtest/kernel

ctags -R

5 查看printf为例 , 执行vi -t printf

实际上用vim去索引代码时,发现很多无法正常跳转,后面用neovim是正常的。

  • 安装neovim及为安装lazy.nvim管理器做准备

2.1 用系统apt-get install neovim版本为0.6.1,需要升级neovim > 0.8.1,否则lazy装不上,需要手动更新

2.1.1 先卸载:apt remove neovim

2.1.2 在这个网站下载https://github.com/neovim/neovim/releases/tag/stable

Download nvim-linux64.tar.gz

2.1.3 解压到~/目录下

tar xzvf nvim-linux64.tar.gz

2.1.4 创建链接

cd /usr/local/bin/

sudo ln -s ~/nvim-linux64/bin/nvim ./nvim

2.2、需要升级git

2.2.1 增加ppa

sudo apt-add-repository ppa:git-core/ppa

sudo apt-get update

2.2.2、查看有什么软件可以更新

apt list --upgradable

可以看到左边红箭头,显示是最新的 git 2.41,而右边箭头是系统里装的 2.17.1 版本

image

2.2.3、安装最新版本

sudo apt-get install git

2.2.4、apt-cache 列出你系统里可安装版本

1.apt-cache madison

sudo apt-cache madison git

2.2.5.apt-cache policy

sudo apt-cache policy  git

2.3解决github连接返回443的问题

该问题一般由于IP设置问题导致,我们将重新编辑/etc/hosts.

PC端ping github.com

正在 Ping github.com [20.205.243.166] 具有 32 字节的数据:

测试ip为20.205.243.166

ubuntu修改/etc/hosts

20.205.243.166 github.com

  • 配置init.lua

1 在~/.config/nvim目录下新建议init.lua, 并新建议lua文件夹, 在lua文件夹下新建basic.lua(基本配置), theme.lua(主题,暂未配置), keybinding.lua(快捷键配置), plugins文件夹(用来放插件下载lua脚本)、plugins-config文件夹(用来配置插件)

1.1配置完文件目录如下,

yanhongfei@ubuntu:~/.config/nvim$ ls

init.lua  lazy-lock.json  lua

yanhongfei@ubuntu:~/.config/nvim$ ls lua/

basic.lua  keybinding.lua  plugins  plugins-config  theme.lua

yanhongfei@ubuntu:~/.config/nvim$ ls lua/plugins

plugin-bufferline.lua  plugin-catppuccin.lua  plugin-nvim-tree.lua  plugin-telescope.lua

yanhongfei@ubuntu:~/.config/nvim$ ls lua/plugins-config/

bufferline.lua  nvim-tree.lua

yanhongfei@ubuntu:~/.config/nvim$

1.2 init.lua配置如下,

yanhongfei@ubuntu:~/.config/nvim$ cat init.lua

--通过require函数导入lua脚本

require("basic")

require("theme")

--自定义快捷键

require("keybinding")

--安装lazy安装器

local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim"

if not vim.loop.fs_stat(lazypath) then

    vim.fn.system({

        "git",

        "clone",

        "--filter=blob:none",

        "https://github.com/folke/lazy.nvim.git",

        "--branch=stable", -- latest stable release

        lazypath,

    })

end

vim.opt.rtp:prepend(lazypath)

--第一次安装lazy时调用下面的方法,(第一次还没有装插件,所以setup为空)装完后可以屏蔽

--require("lazy").setup()

--安装插件使用方法: require("lazy").setup(plugins, opts)

--主题插件 catppuccin.nvim

--下载插件

--屏蔽一个一个setup的方法,改成利用plugins目录统一安排,setup的参数变为setup("plugins")

--require("lazy").setup(

--    { "catppuccin/nvim", name = "catppuccin", priority = 1000 }

--)

require("lazy").setup("plugins")

--plugins配置

-- nvim-tree 配置 :h nvim-tree

require("plugins-config.nvim-tree")

-- bufferline 配置 :h bufferline-configuration查看插件支持的配置

require("plugins-config.bufferline")

--应用插件的配色

vim.cmd.colorscheme("catppuccin")

具体配置项参考附件

目前已实现:

1 catppuccin 插件配色

2 nvim-tree 左侧目录显示,可增删查改文件或文件夹

3 bufferline 顶部文件导航,未添加关闭按钮,其可配合moll/vim-bbye 这个插件实现,暂未做

4 telescope 目前已可实现文件搜索功能,但live-grep不行,需要安装fd rd插件,懒得折腾就没做了,事实上我觉得可以通过:term打开新窗口,再使用find+grep会更方便

安装完telescope后需执行:checkhealth telescope查看当前插件状态。

==============================================================================

telescope: require("telescope.health").check()

Checking for required plugins ~

- OK plenary installed.

- WARNING nvim-treesitter not found.

Checking external dependencies ~

- ERROR rg: not found. `live-grep` finder will not function without [BurntSushi/ripgrep](https://github.com/BurntSushi/ripgrep) installed.

- WARNING fd: not found. Install [sharkdp/fd](https://github.com/sharkdp/fd) for extended capabilities

===== Installed extensions ===== ~

后续写代码还可以装上代码补全插件,目前够用,暂时不处理了

Ctags -R 生成tags

nvim .打开内核代码目录

ALT +M 打开nvim-tree

CRTL + l 可在各个代码编辑页面之间跳转

CTRL + ww nvim-tree页面和代码页面之间跳转

:term 打开终端

空格+ ff 打开telescope搜索文件

最后附上一张效果图

附件:

neovim配置文件详情,安装nvim后更新资源-CSDN文库

参考链接https://www.cnblogs.com/youngxhui/p/17730417.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

低功耗16位MCU:R7F100GLL3CFA、R7F100GLN2DLA、R7F100GLN3CFA、R7F100GLN2DFA是新一代RL78微控制器

产品介绍: RL78/G23低功耗MCU可在41μA/MHz CPU运行频率下工作,功耗低,停止4KB SRAM保持时为210nA。该MCU设有snooze模式排序器,可显著降低间歇工作时的功耗。RL78/G23组具有1.6V至5.5V宽工作电压范围,频率高达32MHz。…

bean生命周期源码(三)

书接上文 文章目录 一、Bean的销毁逻辑1. 简介2. Bean销毁逻辑的注册3. Bean的销毁过程 一、Bean的销毁逻辑 1. 简介 前面我们已经分析完了Spring创建Bean的整个过程的源码,在创建bean的核心方法中doCreateBean这一个核心方法中,在方法的最后面有这么…

SpringCloudAlibaba Seata在Openfeign跨节点环境出现全局事务Xid失效原因底层探究

原创/朱季谦 曾经在SpringCloudAlibaba的Seata分布式事务搭建过程中,跨节点通过openfeign调用不同服务时,发现全局事务XID在当前节点也就是TM处,是正常能通过RootContext.getXID()获取到分布式全局事务XID的,但在下游节点就出现获…

ros2+gazebo+urdf:ros2机器人使用gazebo的urdf文件中的<gazebo>部分官网资料

原文链接SDFormat extensions to URDF (the gazebo tag) — Documentation 注意了ros2的gazebo部分已经跟ros1的gazebo部分不一样了: Toggle navigation SpecificationAPIDocumentationDownload Back Edit Version: 1.6 Table of C…

我在代码随想录|写代码Day-Day之总结篇

我是用笔手写的我觉得这样可以对个人记忆会更好,而且理解更深解释也更清楚 下面是手写笔记 总结部分----- 第一章 二分 二分模版 图片可能反了下不过没有关系 图形打印模版题 第二章 链表 链表基本操作和疑问 链表代码操作和解析----5大操作 删除部分 对结点的操作 反了反了…

关于个人Git学习记录及相关

前言 可以看一下猴子都能懂的git入门,图文并茂不枯燥 猴子都能懂的git入门 学习东西还是建议尽可能的去看官方文档 权威且详细 官方文档 强烈建议看一下GitHub漫游指南及开源指北,可以对开源深入了解一下,打开新世界的大门! …

若依SQL Server开发使用教程

1. sys_menu表中的将菜单ID修改为自动ID,解决不能增加菜单的问题,操作流程如下: 解决方案如下 菜单栏->工具->选项 点击设计器,去掉阻止保存要求更新创建表的更改选项,点确认既可以保存了 2 自动生成代码找不表的解决方案…

C语言--直接插入排序【排序算法|图文详解】

一.直接插入排序介绍🍗 直接插入排序又叫简单插入排序,是一种简单直观的排序算法,它通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。 算法描述: 假设要排序…

idea 找不到 Free MyBatis plugin

idea 找不到 free mybatis plugin 可以使用mybatisX替换: 插件安装成功后,重启idea。

【English】水果单词小小汇总~~

废物研究生,只要不搞科研干啥都是开心的,啊啊啊啊啊科研要命。作为一个水果怪(每天不吃水果就要命的那种哈哈哈哈)突然发现竟然就知道什么apple、banana、orange!惭愧惭愧,正好兴致正浓,来整理一…

Java HashMap在遍历时删除元素

文章目录 1. HashMap数据结构1.1 数组单向链表红黑树1.2 指定初始容量,省去多次扩容步骤1.3 获取map内容:Map.Entry 2. 遍历集合时删除元素3. computeIfAbsent()方法 1. HashMap数据结构 jdk是1.8版本 HashMap 线程不安全 ConcurrentHashMap 线程安全 1.…

jvm_下篇_补充_MAT从入门到精通

MAT从入门到精通 概述安装mac安装指定jdk配置内存 使用配置获取dump文件Overview下功能解释HistogramDominator TreeLeak SuspectsOverview功能说明结尾Thread_Overview OQLHeap Dump OverviewFind Object by address 概述 尽管JVM提供了自动内存管理的机制,试图降…

golang的jwt学习笔记

文章目录 初始化项目加密一步一步编写程序另一个参数--加密方式关于StandardClaims 解密解析出来的怎么用关于`MapClaims`上面使用结构体的全代码实战项目关于验证这个项目的前端初始化项目 自然第一步是暗转jwt-go的依赖啦 #go get github.com/golang-jwt/jwt/v5 go get githu…

小狐狸ChatGPT系统 H5前端底部菜单导航文字修改方法

小狐狸ChatGPT系统后端都前端都是编译过的,需要改动点什么非常难处理,开源版修改后也需要编译后才能使用,大部分会员也不会使用,像简单的修改下底部菜单文字、图标什么的可以对照处理。这里以小狐狸ChatGPT系统1.9.2版本H5端为例&…

Unity向量按照某一点进行旋转

Unity向量按照某一点进行旋转 一、unity的旋转二、向量按照原点进行旋转注意案例 三、向量按照指定位置进行旋转案例 一、unity的旋转 首先要知道一点就是在Unity的旋转中使用过四元数进行旋转的,如果对一个物体的rotation直接赋值你会发现结果不是你最终想要的结果…

Kubectl 部署有状态应用(上)

前面介绍了Deployment以及如何部署无状态应用。 Kubectl 部署无状态应用Deployment Controller详解(上)Deployment Controller详解(下) 本文将继续介绍如何在k8s上部署有状态应用。 有状态和无状态服务的区别 无状态&#xff…

数组元素反序

和前面的字符串逆向输出有异曲同工之妙 第一位和最后一位交换位置,然后用比大小循环 那么接下来修改一下这个程序,我们接下来解释一下p的概念 画图解释: 在最前面的 定义的时候,我们将p(0)定义在了1上&…

四、Spring IoC实践和应用(基于配置类方式管理 Bean)

本章概要 基于配置类方式管理 Bean 完全注解开发理解实验一:配置类和扫描注解实验二:Bean定义组件实验三:高级特性:Bean注解细节实验四:高级特性:Import扩展实验五:基于注解配置类方式整合三层…

抓包工具Fiddler的常用操作

文章目录 Fiddler概述Fiddler页面介绍常用功能介绍端口号的修改设置抓HTTPS数据Fillder过滤请求数据 接口相关Fiddler中查看请求信息Fiddler中查看响应信息 Fiddler模拟弱网测试Fiddler模拟mock数据Fillder篡改数据 Fiddler概述 fiddler是一款http协议调试代理工具,…

redis的那些事(二)——布隆过滤器

什么是布隆过滤器? 布隆过滤器(Bloom Filter)是1970年由布隆提出的。它实际上是一个很长的二进制向量和一系列随机映射函数。布隆过滤器可以用于检索一个元素是否在一个集合中。 布隆过滤器实现原理 布隆过滤器是一个bit向量或者说是一个b…