【Linux】Vim 设置

零、起因

刚学Linux,有时候会重装Linux系统,然后默认的vi不太好用,需要进行一些设置,本文简述如何配置一个好用的Vim。

壹、软件安装

sudo apt-get install vim

贰、配置路径

对所有用户生效:

sudo vi /etc/vim/vimrc

对当前用户生效:

vi ~/.vimrc

查看配置位置:

打开vim,输入:version

叁、常用配置

" 显示行号
set number " 显示光标行横线
set cursorline " 高亮打开
syntax on " 打开文件检测
filetype on " 设置 tab 键的宽度为 4 个空格
set tabstop=4 " 设置当输入 tab 时,实际插入的空格数为 4
set shiftwidth=4 " 将 tab 转换为空格
set expandtab " (可选)设置自动缩进时使用空格而不是 tab
set softtabstop=4 " 设置自动缩进
set autoindent " 设置使用 c/c++ 语言的自动缩进方式
set cindent

肆、C/C++代码自动补全

1. coc.nvim(推荐)

最新的版本要求:Vim >= 9.0.0438 或者 Neovim >= 0.8.0,但是很可惜,学妹用的Ubuntu 22.04,她经常问我一些问题,为方便复现问题,故我也是用的Ubuntu 22.04,而且我觉得水母比食蚁兽好看些,O(∩_∩)O哈哈~

而Ubuntu 22.04的Vim版本只有8.2.2121,故我需要选择一个低一点的版本,正好,在coc.nvim的代码仓库中,最新的发行版是v0.0.82的,这个发行版是2022年发布的,它对vim版本的要求是 nvim >= 0.4.0 或者 vim >= 8.1.1719,故我选择coc.nvim v0.0.82,使用Ubuntu 22.04的小伙伴可以跟我一起来配置一下~

(1)安装依赖

①. nodejs

nodejs >= 12.12,这边我安装nodejs 12.12版本,到官网链接中找到Linux的版本:https://nodejs.org/dist/v12.22.12/node-v12.22.12-linux-x64.tar.xz

下载后解压:

tar -xf node-v12.22.12-linux-x64.tar.xz

移动到系统目录/usr/local

sudo mv node-v12.22.12-linux-x64 /usr/local/nodejs

创建软链接,方便在bash中调用

sudo ln -s /usr/local/nodejs/bin/node /usr/local/bin/node
sudo ln -s /usr/local/nodejs/bin/npm /usr/local/bin/npm

验证安装,应该输出v12.22.12和6.14.16

node -v
npm -v
②. clangd 和 bear

clangd 是一个基于 Clang 的语言服务器,提供代码补全、编译错误提示、跳转到定义等功能;

bear 是一个用于生成编译数据库的工具,其核心功能是帮助集成开发环境或代码分析工具(如:Clang )正确解析项目的编译配置。

sudo apt install clangd bear

(2)安装 vim-plug

vim-plug是Vim的插件管理器,而coc.nvim是Vim的插件,我们可以用vim-plug来管理coc.nvim的安装,vim-plug对Vim的版本要求比较低,Vim 7.4.1578 或更高就行。

①下载vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

要是下载不了,你也可以手动下载后,把下载到的plug.vim文件放到~/.vim/autoload/目录下,plug.vim文件的下载链接:https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

②. 配置

把如下代码添加到~/.vimrc文件中:

" vim-plug
call plug#begin()
" 插件列表
" coc.nvim 的 0.0.82 版本
Plug 'neoclide/coc.nvim', {'tag': 'v0.0.82'}
call plug#end()

(3)安装 coc.nvim(完成)

退出Vim,重新进入Vim,执行:PlugInstall命令,Vim会自动安装好coc.nvim,您必须安装 coc 扩展或配置语言服务器才能获得 LSP 支持。

下面的Vim命令是安装coc.nvim对Json、TypeScript和C/C++支持插件的命令,同样也是在Vim里执行的命令:

:CocInstall coc-json coc-tsserver coc-clangd

(4)coc.nvim 使用小技巧

安装

:CocInstall 插件名

卸载

:CocUninstall 插件名

查询已安装插件

:CocList extensions

若要在其他机器上部署coc.nvim,可以通过配置vim配置文件的方式安装coc.nvim的插件,创建list全局变量coc_global_extensions,配置方式如下:

" 格式:let g:coc_global_extensions = ['插件名1', '插件名2', '插件名3', ...]
let g:coc_global_extensions = ['coc-json', 'coc-tsserver', 'coc-clangd']

常用配置,写入~/.vimrc的:

" 按Tab键选择补全
inoremap <silent><expr> <TAB>
\ coc#pum#visible() ? coc#pum#next(1) :
\ CheckBackspace() ? "\<Tab>" :
\ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>" " 按回车键确认补全
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
\: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
" 补全相关函数
function! CheckBackspace() abort
let col = col('.') - 1
return !col || getline('.')[col - 1] =~# '\s'
endfunction " 同名称变量画下划线
autocmd CursorHold * silent call CocActionAsync('highlight')

配置完成后,请看第3点,3. 代码补全了解如何使用bear。

2. YouCompleteMe

注意:此操作对Vim版本要求较高(Vim 9.1.0016+),请先确认版本是否支持!

YouCompleteMe 是一个功能强大的语义级代码补全插件,支持 C/C++ 的智能提示和跳转。下文介绍 YouCompleteMe 如何配置。

(1)安装依赖

基础工具链

sudo apt install g++ gcc cmake git python3-dev clangd

Vim 插件管理器 Vundle

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

(2)配置 .vimrc

添加以下内容到 ~/.vimrc

" Vundle 插件配置
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'Valloric/YouCompleteMe' " 自动补全插件
Plugin 'scrooloose/nerdtree' " 可选:文件树插件
Plugin 'yianwillis/vimcdoc' " 中文文档插件
call vundle#end() " YCM 自动补全配置
let g:ycm_global_ycm_extra_conf = '~/.vim/.ycm_extra_conf.py'
let g:ycm_clangd_binary_path = 'clangd' " 需安装 clangd
let g:ycm_auto_trigger = 1 " 自动触发补全
let g:ycm_key_list_select_completion = ['<Tab>', '<Down>']
let g:ycm_key_list_previous_completion = ['<S-Tab>', '<Up>']

(3)安装 YCM

在 Vim 中执行插件安装命令(VIM会显示正在处理插件,等处理完再退出):

:PluginInstall

安装完成后,进入 YCM 目录编译:

cd ~/.vim/bundle/YouCompleteMe
python3 install.py --clangd-completer

3. 代码补全

C项目中,若项目比较复杂,需要生成compile_commands.json文件便于YCM处理,对于Make项目,可以使用bear来辅助生成。

(1)安装bear

sudo apt install bear

(2)生成compile_commands.json

在make项目目录下执行:

bear -- make

(3)完成

再次使用vi打开C文件时,有提示了。

伍、参考

  1. 【硬货】让你的vim像vscode一样强大 —— coc.nvim终极指南:https://www.bilibili.com/video/BV1Ka4y1E7AM/
  2. coc.nvim v0.0.82:https://github.com/neoclide/coc.nvim/tree/v0.0.82
  3. vim-plug:https://github.com/junegunn/vim-plug
  4. NodeJS:https://nodejs.org/zh-cn/download
  5. 介绍 coc-tsserver:https://www.doubao.com/thread/w86fb5d3415eb548b
  6. 介绍 Clangd:https://www.doubao.com/thread/wcdc4b37c25de2f88
  7. Linux 中 bear 介绍:https://www.doubao.com/thread/wb22d77d050dd1b90
  8. 在 Ubuntu 上安装特定版本 Node.js 和 npm:https://www.doubao.com/thread/wc1f955ff472849b1
  9. 手把手教你搭建一个C/C++的vim补全环境:https://www.bilibili.com/video/BV16P4y1X7xQ/
  10. 7款优秀Vim插件帮你打造完美IDE:https://zhuanlan.zhihu.com/p/145793963
  11. 手把手教你配置linux下C++开发工具——vim+ycm(YouCompleteMe),支持基于语义的自动补全和第三方库补全(史上最简单、史上最透彻、史上最全的终极解决方案):https://cloud.tencent.com/developer/article/1745640
  12. 【Linux基础】Vim保姆级一键配置教程(手把手教你把Vim打造成高效率C++开发环境):https://blog.csdn.net/weixin_45031801/article/details/138765419
  13. Vim中C/C++开发全套配置安装,自动补全,YouCompleteMe配置,编译运行,彩色括号,文件树等):https://blog.csdn.net/m0_52910424/article/details/132063716

【Linux】Vim 设置的更多相关文章

  1. linux vim设置和 快捷命令配置

    1.vim配置 set tabstop= set shiftwidth= set softtabstop= set fileencodings=utf-,ucs-bom,gb2312,gbk,gb18 ...

  2. 经典 Linux & VIM 教程

    简明 Vim 练级攻略: http://coolshell.cn/articles/5426.html VIM快捷键: http://coolshell.cn/wp-content/uploads/2 ...

  3. linux VIM基本命令

    linux VIM命令: vim 在命令行中输入vim,进入vim编辑器 Esc 退出i(插入)命令进行其他命令使用 :sh 进入shell命令行,运行完命令后ctrl+d退出又一次进入vim编辑继续 ...

  4. Linux 服务器设置成支持中文

    Linux 服务器设置成支持中文 由于服务器默认是不支持中文的.所以一般需要单独设置一下. 检查本机已有的语言包 locale -a 默认是没有中文的,所以会显示: C C.UTF-8 POSIX e ...

  5. linux操作系统-设置静态ip

    在使用linux虚拟机的时候因为经常有关机的需求,然后重新开机后可能面临这上一次获取的ip被改变,在这里我分享一下在linux 下设置静态ip的经验 1.查看路由状态 [root@localhost ...

  6. Linux 各类设置、配置、使用技巧参考,Linux使用集锦

    ========== 参考格式 (新增记录时,复制粘贴在下)============= [日期]: <标题> 参考链接ref1: 参考链接ref2: 正文: ========== 参考格式 ...

  7. Ubuntu18.04系统下安装Pycharm&vim设置自动缩进及默认显示行号

    Ubuntu18.04系统自带python3.6及python2.7,Pycharm是一款非常强大的IDE.目前Pycharm有两个版本:专业版和Community社区,区别是专业版是收费,而且功能更 ...

  8. ElasticSearch(十四):Linux下设置ElasticSearch 开机自启

    一.创建脚本文件 在  /etc/init.d  目录下,创建脚本文件 elasticsearch # cd /etc/init.d/ # vim elasticsearch 将以下内容写入文件中(其 ...

  9. Linux Centos7设置UTF-8编码,防止中文乱码

    Linux Centos7设置UTF-8编码,防止中文乱码 # localeLANG=zh_CN.gb2312LC_CTYPE="zh_CN.gb2312"LC_NUMERIC=& ...

  10. Linux scp 设置nohup后台运行

    Linux scp 设置nohup后台运行 1.正常执行scp命令 2.输入ctrl + z 暂停任务 3.bg将其放入后台 4.disown -h 将这个作业忽略HUP信号 5.测试会话中断,任务继 ...

随机推荐

  1. vue基础4

    Q:1.动画的使用方法以及动画库的使用方式 2.vue中的指令有哪些? 3.vue中生命周期钩子函数有哪些?分别代表什么含义? 4.filter的语法是什么? 5.computed的特点是什么? 6. ...

  2. 人类讨厌AI的缺点,其实自己也有,是时候反思了。

    马特·科拉默摄于Unsplash 前言:人类讨厌AI,其实就是讨厌自己! 如果你问一些人对人工智能的看法,你可能会听到诸如不道德.偏见.不准确甚至操纵这样的词语. 人工智能因为种种原因正备受批评.它让 ...

  3. h5 页面播放base64编码的audio数据

    例子: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8 ...

  4. 题解:AT_abc389_d [ABC389D] Squares in Circle

    假定原点为圆心. 我们只考虑点在第一象限的情况,剩下的情况同理. 因为圆心是原点,所以在圆内的点的横坐标一定在 \(r\) 之内. 枚举点的横坐标 \(x + \frac{1}{2}\),二分最大的 ...

  5. Symbolic pg walkthrough Intermediate window 利用302进行文件csrf

    nmap nmap -p- -A -sS -T4 192.168.239.177 Starting Nmap 7.95 ( https://nmap.org ) at 2025-01-15 03:39 ...

  6. T480指纹识别支持

    目标 通过指纹识别解锁slim-lock 环境 操作系统archlinux 桌面管理器slim 锁屏slimlock 硬件 Thinkpad T480 注: 指纹设备id, 06cb:009a 安装 ...

  7. 一个基于 C# 开源的第三方 OAuth2 授权登录整合库

    前言 在我们的开发工作中有可能会对接过各种各样的第三方平台的登录授权,来获取用户的相关账号信息(如:微信登录.支付宝登录.飞书登录.钉钉登录.GitHub登录等等).今天大姚给大家推荐一个基于 C# ...

  8. 动手学深度学习-python基础知识介绍part1

    基础详解-part1 import torch x=torch.arange(12) x x.shape x.numel() #数组中元素的总数 # 修改形状 x.reshape(3,4) torch ...

  9. 大型语言模型(LLM)为什么处理日语这么“头大”?

    引言 你有没有想过,为什么 AI 大神们处理日语时,总是会挠头?其实,这都要从"token"这个神奇的小东西说起. 在大型语言模型(LLM)中,token 就是文本的基本处理单位. ...

  10. Netty实战:Netty优雅的创建高性能TCP服务器(附源码)

    文章目录 前言 1. 前置准备 2. 消息处理器 3. 重写通道初始化类 4. 核心服务 5. 效果预览 6. 添加通道管理,给指定的客户端发送消息 7. 源码分享 前言 Springboot使用Ne ...