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

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

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

相关文章

[kubernetes]Kube-APIServer

API Server API Server是什么 提供集群管理的REST API接口,包括认证授权、数据校验以及集群状态变更等提供其他模块之间的数据交互和通信的枢纽(其他模块通过API Server查询或修改数据,只有API Server才直接操作etcd) 访问控制…

开源自托管导航页配置服务Dashy本地搭建结合内网穿透远程访问

开源自托管导航页配置服务Dashy本地搭建结合内网穿透远程访问 简介1. 安装Dashy2. 安装cpolar3.配置公网访问地址4. 固定域名访问 简介 Dashy 是一个开源的自托管的导航页配置服务,具有易于使用的可视化编辑器、状态检查、小工具和主题等功能。你可以将自己常用的一…

Mongodb基础介绍与应用场景

NoSql 解决方案第二种 Mongodb MongoDB 是一款开源 高性能 无模式的文档型数据库 当然 它是NoSql数据库中的一种 是最像关系型数据库的 非关系型数据库 首先 最需要注意的是 无模式的文档型数据库 这个需要后面我们看到它的数据才能明白 其次是 最像关系型数据库的非关系型数据…

RK3588平台开发系列讲解(AI 篇)RKNN 数据结构详解

文章目录 一、rknn_sdk_version二、rknn_input_output_num三、rknn_tensor_attr四、rknn_perf_detail五、rknn_perf_run六、rknn_mem_size七、rknn_tensor_mem八、rknn_input九、rknn_output沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇章主要讲解 RKNN 相关的数…

Autosar CAN开发02(入门Autosar)

Autosar架构 想起当时刚毕业进入公司之后,我的岗位是Autosar Bsw软件工程师。 看着这个什么“Autosar”,真的是一脸懵。 后来才知道,按照我的理解:Autosar就是一个软件架构。它分为ASW和BSW。ASW负责实现应用层功能&#xff08…

“React学习之旅:从入门到精通的点滴感悟“

在探索和学习React的过程中,我逐渐领悟到了前端开发的魅力与挑战。React,作为Facebook推出的开源JavaScript库,以其独特的思维方式和强大的功能,引领着前端开发的潮流。在这篇文章中,我将分享我的React学习心得&#x…

test assert-01-Google Truth 断言

Truth Truth 是用于Java测试的断言框架,灵感来自于FEST,并受到一些可扩展性需求的驱动,几乎完全由谷歌员工在业余时间编写,或者作为Java核心图书馆管理员的身份做出贡献。 作用 作为工程师,我们花费大部分的时间来阅…

《C++避坑神器·二十四》简单搞懂json文件的读写之根据键值对读写Json

c11 json解析库nlohmann/json.hpp文件整个代码由一个头文件组成 json.hpp,没有子项目,没有依赖关系,没有复杂的构建系统,使用起来非常方便。 json.hpp库在文章末尾下载 读写主要有两种方式,第一种根据键值对读写&…

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Progress进度条组件

鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Progress进度条组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、Progress组件 进度条也是UI开发最常用的组件之一,进度条组件…

OpenAI换血大震动始末:“ChatGPT之父”奥特曼,缘何被“扫地出门”?

近期,AI业界发生了一场“大地震”。作为聊天机器人ChatGPT的开发者,OpenAI无疑是最受关注的人工智能公司之一。就是这家公司的联合创始人、CEO、有“ChatGPT之父”之称的阿尔特曼在“疯狂的5天”里,经历了被闪电免职、加入微软、最终又官复原…

影响嵌入式项目成功的一些要素

选择了嵌入式开发这个技术领域,就相当于选择了一条充满挑战的技术开发道路。 对于工程师而言,项目的成功和失败对他们十分重要。因为一行行代码他们不知道熬了多少个通宵,脑细胞死了多少而写出来的。 如果项目失败了,就意味着辛辛…

移动开发新的风口?Harmony4.0鸿蒙应用开发基础+实践案例

前段时间鸿蒙4.0引发了很多讨论,不少业内人士认为,鸿蒙将与iOS、安卓鼎足而三了。 事实上,从如今手机操作系统竞赛中不难看出,安卓与iOS的形态、功能逐渐趋同化,两大系统互相取长补短,综合性能等差距越来越…

【Element】el-select下拉框实现选中图标并回显图标

一、背景 需求&#xff1a;在下拉框中选择图标&#xff0c;并同时显示图标和文字&#xff0c;以便用户可以直观地选择所需的图标。 二、功能实现 <template><div><el-table ref"table" :data"featureCustom2List" height"200"…

分享71个Java源码总有一个是你想要的

分享71个Java源码总有一个是你想要的 学习知识费力气&#xff0c;收集整理更不易。 知识付费甚欢喜&#xff0c;为咱码农谋福利。 链接&#xff1a;https://pan.baidu.com/s/1frK-W3GT8WrydSlQ-E3o6A?pwd6666 提取码&#xff1a;6666 UI代码 def __init__(self):import …

Text2SQL学习整理(五)将Text-to-SQL任务与基本语言模型结合

导语 上篇博客&#xff1a;Text2SQL学习整理&#xff08;四&#xff09;将预训练语言模型引入WikiSQL任务简要介绍了两个借助预训练语言模型BERT来解决WIkiSQL数据集挑战的方法&#xff1a;SQLOVA和X-SQL模型。其中&#xff0c;借助预训练语言模型的强大表示能力&#xff0c;S…

【Gitlab】CICD流水线自动化部署教程

第一步&#xff0c;准备 GitLab 仓库 这个不用多说&#xff0c;得先保证你的项目已经托管在一个 GitLab 仓库中。 第二步&#xff0c;定义 .gitlab-ci.yml 文件 在你的项目根目录中创建一个 .gitlab-ci.yml 文件。这个文件将定义所有 CI/CD 的工作流程&#xff0c;包括构建、测…

C++中的内存锁定

内存锁定(memory locking)是确保进程保留在主内存中并且免于分页的一种方法。在实时环境中&#xff0c;系统必须能够保证将进程锁定在内存中&#xff0c;以减少数据访问、指令获取、进程之间的缓冲区传递等的延迟。锁定内存中进程的地址空间有助于确保应用程序的响应时间满足实…

OCP NVME SSD规范解读-1

OCP&#xff08;Open Compute Project&#xff09;是一个由Facebook于2011年发起的开源项目。其目标是重新设计和优化数据中心的硬件&#xff0c;包括服务器、存储、网络设备等&#xff0c;以提高效率&#xff0c;降低运营成本&#xff0c;并推动技术的创新和标准化。 在OCP中&…

C++ Qt开发:Charts绘制各类图表详解

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。 …

部署谷歌的Gemini大模型

前言 本文将介绍如何使用Docker、Docker-Compose私有化部署谷歌的Gemini大模型&#xff0c;以及没有服务器的情况下如何使用Vercel来部署。 Demo: 使用新加坡云服务器部署&#xff1a;Gemini Pro Chat (snowice.eu.org) 使用Vercel部署&#xff1a;Gemini Pro Chat (snowice.eu…