玩 Vim 的哲学就是追求 “基本够用”, 包括装插件、设置快捷键或自己写脚本。因为基本够用时,你才能有效地把Vim变成生产力,而不是因为“磨刀误了砍柴功”,最终丧失了对 Vim 的耐心。 Vim 的扩展可能性很多,在学会 Vim 自带的大量快捷键之前,没有必要去装一堆的插件,这篇文章就是这样的一个平衡点,恰到好处地教你使用最有用的 Vim C++ 插件。

这篇博客介绍了一种简单实用的VIM用于C++开发的配置方法,其特点是流畅的补全和在文件间便捷地跳转。

  1. 安装 vim
sudo apt install vim
  1. 安装 clangd-11 (官方源)
sudo apt install clang-11 clang-tools-11 clang-11-doc libclang-common-11-dev \
   libclang-11-dev libclang1-11 clang-format-11 clangd-11 clang-tidy-11 \
   libc++-11-dev libc++abi-11-dev
sudo update-alternatives --install /usr/bin/clangd clangd /usr/bin/clangd-11 100
  1. 安装 vim-plug
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
 

提示 :如果国内因DNS污染无法访问 raw.githubusercontent.com,可以通过设置 /etc/hosts 解决,在其中增加如下一行内容。

151.101.84.133  raw.githubusercontent.com
  1. 配置 vimrc

修改 ~/.vimrc 文件如下:

let mapleader = " "
call plug#begin('~/.vim/plugged')
Plug 'neoclide/coc.nvim', {'for':[ 'c', 'cpp', 'json', 'cmake', 'vim'], 'branch': 'release'}
Plug 'rhysd/vim-clang-format', {'for' : ['c', 'cpp']}
Plug 'chxuan/cpp-mode', {'for' : ['cpp']}
call plug#end()
" plugin-config vim-clang-format
let g:clang_format#auto_format=1
" plugin-config cpp-mode
nnoremap <leader>y :CopyCode<cr>
nnoremap <leader>p :PasteCode<cr>
nnoremap <leader>u :GoToFunImpl<cr>
nnoremap <silent> <leader>a :Switch<cr>
" plugin-config coc-snippets {{{
inoremap <silent><expr> <TAB>
      \ pumvisible() ? coc#_select_confirm() :
      \ coc#expandableOrJumpable() ? "\<C-r>=coc#rpc#request('doKeymap', ['snippets-expand-jump',''])\<CR>" :
      \ <SID>check_back_space() ? "\<TAB>" :
      \ coc#refresh()
function! s:check_back_space() abort
  let col = col('.') - 1
  return !col || getline('.')[col - 1]  =~# '\s'
endfunction
let g:coc_snippet_next = '<tab>'
" plugin-config coc-snippets }}}
" plugin-config coc-definition
nmap <silent> <leader>d :call CocAction('jumpDeclaration')<CR>
nmap <silent> <leader>i :call CocAction('jumpDefinition')<CR>
" options {{{
set tabstop=2
set softtabstop=2
set shiftwidth=2
set smarttab
set expandtab
set nohlsearch
set incsearch
set hidden
set nobackup
set nowritebackup
set updatetime=300
set shortmess+=c
set signcolumn=yes
set nonumber
set ttyfast
set showcmd
set cmdheight=1
set noswapfile
set nobackup
set noerrorbells
set autowrite
set ignorecase
set ruler
set cursorline
set colorcolumn=110
set title
set showmatch
set noshowmode
set mouse=v
set modifiable
set splitright
set splitbelow
set shortmess=atI
set backspace=indent,eol,start
set wildmenu
set encoding=utf-8 nobomb
set binary
set autoread
set mousehide
set spelllang=en_US
set fileformat=unix
set autoread
set autowrite
set laststatus=2
set termwinsize=10*0
set number
set background=dark
set formatoptions=c,l,1,p
set expandtab
set nowrap
" options }}}
" Uncomment the following to have Vim jump to the last position when reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 0 && line("'\"") <= line("$")
    \| exe "normal! g'\"" | endif
endif
if has('persistent_undo')      "check if your vim version supports it
  set undofile                 "turn on the feature
  set undodir=$HOME/.vim/undo  "directory where the undo files will be stored
endif

修改.vimrc后,请不要忘记在命令行中执行 mkdir ~/.vim/undo -p 创建一个存放历史操作记录的文件夹。

  1. 安装插件
    在 vim 默认导航模式键入:PlugInstall,vim-plug 会安装~/.vimrc中所配置的三项插件,主要用于代码自动补全和跳转。
  2. 配置补全服务器
    在 vim 默认导航模式键入:CocConfig,在打开的配置文件中粘贴如下内容:

提示: 在vim中编辑时,阁下可能需要在粘贴前 :set paste,键入i进入插入模式,按 Ctrl+Shift+V 粘贴系统剪贴板内容,Esc退出,然后:set nopaste:set paste 的作用是临时取消自动插入缩进符。

"languageserver":{ "clangd":{ "command":"clangd", "filetypes":[ "c", "cpp" "rootPatterns":[ "compile_commands.json", ".git" "args":[ "--compile-commands-dir=build", "--compile_args_from=filesystem", "--all-scopes-completion", "--background-index", "--clang-tidy", "--cross-file-rename", "--completion-parse=always", "--completion-style=detailed", "--function-arg-placeholders", "--header-insertion-decorators", "--query-driver=/usr/bin/**/clang-*,/home/adem/GCC-10/bin/g++*", "--header-insertion=never", "--limit-results=0", "-j=6", "--pch-storage=memory"

在后续的项目中,只要使vim所编辑的文件的各级父目录下存在compile_commands.json 文件,就可以实现整个项目中变量的跳转和补全了,并且感觉不到延时。这里的 compile_commands.json 文件可以通过许多常用的工具方便地生成,参见这里

示例: 当使用 CMake 时,在命令行中增加 -DCMAKE_EXPORT_COMPILE_COMMANDS=1 选项,或在顶层CMakeLists.txt中增加 set(CMAKE_EXPORT_COMPILE_COMMANDS ON)一行内容。

该环境下可用的部分快捷键

  • <ctrl>+n 切换下一个补全项(键入单词或函数时会自动补全,且自带实时语法检查)
  • <tab> 切换下一个补全项
  • <space>+d 跳转到(当前光标所在位置对象的)定义
  • <spacd>+i 跳转到(当前光标所在位置对象的)实现
  • <ctrl>+o 跳转到上一位置
  • <ctrl>+i 跳转到下一位置
  • <space>+a 切换头文件/cpp文件
  • <space>+y 在头文件中复制函数签名
  • <space>+p 在对应的cpp文件中粘贴函数实现的定义
  • 重新打开文件后光标会从上次退出的位置开始,并且可以保留上次编辑的历史回退记录。
  • 其它VIM中默认自带的常用快捷键在此不重复列出。
文章目录1. vim 安装2. .vimrc文件配置3.插件管理工具plug.vim安装配置3.1 plug.vim 安装3.2 plug.vim 配置4. 各插件安装配置4.1 ctags 安装配置4.1.1 安装:4.1.2 配置4.1.3 用法 1. vim 安装 2. .vimrc文件配置 3.插件管理工具plug.vim安装配置 3.1 plug.vim 安装 curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.
@Test public void test2(){ File file = new File("E:" + File.separatorChar + "IO文件" + File.separatorChar + "seecen.txt"); File file1 = new File("hello.txt"); System.out.println(file1.getAbsolutePath() i.创建工程的tags并添加到vim中 进入工程目录中,运行ctags -R --c++-kinds=+px --fields=+iaS --extra=+q  在~/.vimrc文件中添加两行set tags=tags;  set autochdir
1、复制配置文件到本用户环境下,再新建一个.vim文件夹,并创建bundle子文件夹 sudo cp /etc/vim/vimrc /home/wangy/.vimrc sudo mkdir /home/wangy/.vim sudo mkdir /home/wangy/.vim/bundle sudo mkdir /home/wangy/.vim/bundle/vundle bundle的配置文件如下: 新增的配置放在这里 set nocompatible be iMproved filetype off required! set rtp+=~/.
新装了ubuntu 20.04,因为要修改内核相关代码,所以要找一套可以自由跳转的内核代码查看工具。除了vs code之外,vim也是个不错的工具。前面看了很多教程,ubuntu 20.04已经自带vim 8.x版本了。基于很多网上的教程使用vundle去配置vim比较复杂,把别人的vimrc复制过来用,要么是代码无法自动补全,要么是vim的窗口划分有问题。后面又找了一大堆,最后发现有两篇介绍的不错,使用vimplug来管理插件。 网上老旧的文章使用手工生成 tags,请使用自动代码索引生成工具,比如 v
ubuntu12.04中使用的vim的版本不支持像语法高亮和文件类型检测等配置 #sudo apt-get install vim vim默认的配置使用起来还不能让人满意,还需要自己配置 默认配置文件是:/etc/vim/vimrc 我们可以在家目录下建立自己的配置文件 切换到家目录 #cd ~ touch一个名为.vimrc的文件(以.开头的为隐藏文件) #vi .vimrc sudo apt update sudo apt install curl curl https://mirrors.aliyun.com/kubernetes/apt/doc/apt-key.gpg | sudo apt-key add - echo "deb https://mirrors.aliyun.com/kubernetes/apt/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list sudo apt update 2. 接下来,您可以安装所需的软件包,如Chrome和Vim。您可以执行以下命令: sudo apt install chromium-browser sudo apt install vim 3. 下载和安装Git,以便您可以从源代码中获取所需的项目和库。您可以执行以下命令: sudo apt install git 4. 配置Git账户,确保您的身份信息正确设置。您可以执行以下命令: git config --global user.name "Your Name" git config --global user.email "youremail@example.com" 5. 下载和安装Python,您可以根据您的需要选择Python版本。执行以下命令来安装Python 3: sudo apt install python3 6. 配置环境变量PATH,将所需的软件包和工具添加到系统路径中。您可以编辑`~/.bashrc`文件并添加以下行: export PATH=$PATH:/path/to/your/software 7. 最后,根据您的具体需求,您可能还需要安装其他软件包和库来支持强化学习环境。这可能包括ROS(Robot Operating System)等。请参考ROS官方文档,根据您的需要进行安装和配置。 请注意,这只是一个基本配置指南,具体的配置可能因您的具体环境和需求而有所不同。建议您根据您的具体情况进行相应的调整和安装。 来自《如何在ubuntu20.04配置 魔趣P 源码编译环境及常见错误解决》 来自《因为以前版本的ros存在与python3不兼容的问题,故博主使用的ros为较新的Noetic版本(该版本推荐在ubuntu 20.04上安装)。 1. 设置source.list》 来自《如下载过慢,可使用官方提供的源列表中寻找可用的国内源,如清华源的指令如下: sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' 2. 设置密钥》<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [在ubuntu20.04配置android P源码编译环境](https://download.csdn.net/download/weixin_38735782/14015430)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [【2021.11.11更新】ROS机器人强化学习环境搭建(Ubuntu20.04 + ROS Noetic + OpenAI_ROS),以Turtlebot3为例...](https://blog.csdn.net/qq_33361420/article/details/118222009)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]