玩 Vim 的哲学就是追求 “基本够用”, 包括装插件、设置快捷键或自己写脚本。因为基本够用时,你才能有效地把Vim变成生产力,而不是因为“磨刀误了砍柴功”,最终丧失了对 Vim 的耐心。 Vim 的扩展可能性很多,在学会 Vim 自带的大量快捷键之前,没有必要去装一堆的插件,这篇文章就是这样的一个平衡点,恰到好处地教你使用最有用的 Vim C++ 插件。
这篇博客介绍了一种简单实用的VIM用于C++开发的配置方法,其特点是流畅的补全和在文件间便捷地跳转。
-
安装 vim
sudo apt install vim
- 安装 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
- 安装 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
- 配置 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
创建一个存放历史操作记录的文件夹。
- 安装插件
在 vim 默认导航模式键入:PlugInstall
,vim-plug 会安装~/.vimrc
中所配置的三项插件,主要用于代码自动补全和跳转。 - 配置补全服务器
在 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 ]