IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> vim C/C++ Linux C Java go html markdown json自动补全 -> 正文阅读

[C++知识库]vim C/C++ Linux C Java go html markdown json自动补全

目的是在两个用户配置不同的vim , 一个用户 只有linux C 的补全,另一个用户有 C/C++ 的补全

vim 安装 powerVim,支持 C++ Java go html php json Markdown 补全(推荐)

步骤很简单

git clone https://github.com/youngyangyang04/PowerVim.git
cd PowerVim
sh install.sh

注意 如果出现

yyy@DESKTOP-BHU9S8H:~/PowerVim$ sh install.sh
install.sh: 8: Syntax error: "(" unexpected

那就把那行 删掉 ,只是显示日期的作用

正常模式下的快捷键(非插入模式)
;n              // 打开文件目录树显示在屏幕左侧
;m              // 打开当前函数和变量目录树显示在屏幕右侧
;h              // 光标移动到左窗口
;l              // 光标移动到右窗口
;k              // 光标移动到上窗口
;j              // 光标移动到下窗口 以上四个快捷键特别是打开多个窗口情况下。使用这个快捷键组合非常实用
;w              // 保存文件
;u              // 向上翻半屏
;d              // 向下翻半屏
;1              // 光标快速移动到行首
;2              // 光标快速移动到行末
;a              // 快速切换.h和cpp文件,写C++的时候很方便
;e              // 打开一个新文件
;z              // 切回shell交互命令,输入fg在切回vim,非常实用
;s              // 水平分屏,并打开文件目录选取想打开的文件,如果想新建文件 ,;e 就好
;v              // 竖直分屏,并打开文件目录选取想打开的文件,如果想新建文件 ,;e 就好
;fw             // 查找项目内关键字,前提是你的系统已经按照了ACK
;ff             // 查找项目内文件名
;gt             // 跳转到变量或者函数定义的地方,前提是安装ctags,并且在在PowerVim输入 ;tg命令 Jump to the definition of the keyword where the cursor is located, but make sure you have make ctags
;gr             // 跳回,对应着;gt
;tg             // 对当前目录打ctag
;y              // 保存当前选中的目录到系统剪切板,前提是vim支持系统剪切板的寄存器
;gg             // 按顺序光标跳转各个窗口

// 一下快捷键是不用;的,直接在 非插入模式 下输入
e               // 快速删除光标所在的词
tabc            // 关闭当前tab,可以用:tabnew来打开一个新的tab Close tab, of course you should :tabnew a file first.
F1              // 编译并运行C++文件,自己写的C++例子的时候一键编译。前提手 动在当前目录建一个bin文件夹,这是用来存放编译产生的执行文件
F1              // 编译Java文件
F2              // 运行Java编译的class文件,一般如果要编译并运行Java文件 按F1编译,在按F2运行
gc              // 快速注释选中的块(是visual模式下选中的块)
gcc             // 快速当前行
{               // 光标向上移动一个代码块
}               // 光标向下移动一个代码块
di(             // 删除括号里的内容
di{             // 删除花括号里的内容

缺点

不支持 C

vim 安装 C/C++ 自动补全(不太推荐)

首先进入官网下载一个插件和一个专门为ctags修改过的头文件。

OmniComplete下载地址
https://www.vim.org/scripts/script.php?script_id=1520

C++ 标准库索引文件下载地址
https://www.vim.org/scripts/script.php?script_id=2358

或者在window下将两个tar包通过vw tools工具直接复制到虚拟机下(或者是xftp, 或者搭建其他服务器传输,通过阿里云,百度云)

下载后进行解压命令
tar -jxvf tar包文件名

first

(1)此时在当前解压出两个目录,一个cpp_src,一个omnicppcomplete-0.41,然后进入 cpp_src
执行

ctags -R --sort=1 --c++-kinds=+p --fields=+iaS --extra=+q --language-force=C++ -f 【生成的tags文件名】 

若不写-f执行,则默认生成tags。

此时能在cpp_src目录下找到一个tags文件。这里tags的绝对路径因人而已。可以用pwd命令查看。

second

(2)然后是安装omnicppcomplete-0.41插件,首先进入当前用户目录 cd ~
然后执行 ls -la查看用户目录下是否有.vim目录 和 .vimrc文件。若没有则创建.vim目录
终端命令为mkdir .vim, 此时解压后的omnicppcomplete-0.41下有三个目录,分别是after、
Autoloadh和common,将这三个目录复制到用户目录下的.vim目录,该插件就算安装完了。

third

(3)然后是写vim的配置,若用户目录下没有.vimrc文件,则手动创建一个: touch .vimrc
然后通过vim ~/.vimrc打开编辑,复制我的配置信息(打开.vimrc配置.txt复制即可),这里需要修改的为

set tags+=/home/firecar/vim简单配置/cpp_src/head   将其路径改为(1)生成的索引文件。

然后基本完成了,然后可以体验试试。

.vimrc


set nu
imap jk <Esc>
nmap  <space> :

set relativenumber
"允许插件
filetype plugin on
" 设置行号
set number
" 语法高亮。自动识别代码,使用多种颜色表示
syntax enable
" 支持使用鼠标
set mouse=a
" 按下回车键后,下一行的缩进会自动跟上一行的缩进保持一致
set autoindent
" 按下Tab键后,vim显示的空格数
set tabstop=4
" normal模式下,>>增加一级缩进、<<取消一级缩进、==取消全部缩进时,每一级缩进的空格数
set shiftwidth=4
" 自动将Tab转为空格(防止Tab键在不同编辑器缩进不一致导致问题)
set expandtab
" Tab转为多少个空格
set softtabstop=4

"设置文件的代码形式 utf8
set encoding=utf-8
set termencoding=utf-8
set fileencoding=utf-8
set fileencodings=ucs-bom,utf-8,chinese,cp936



"新建.c,.h,.cpp文件,自动插入文件头
autocmd BufNewFile *.h,*.c,*.cpp exec ":call SetTitle()"
""定义函数SetTitle,自动插入文件头
func SetTitle()

if expand("%:e")== 'c'
    call setline(1,"#include<stdio.h>")
        call append(line("."), "#include<stdlib.h>")
    call append(line(".")+1, "#include<unistd.h>")
    call append(line(".")+2, "#include<fcntl.h>")
    call append(line(".")+3, "#include<string.h>")
    call append(line(".")+4, "")
endif

if expand("%:e")== 'cpp'
        call setline(1,"#include<iostream>")
        call append(line("."), "using namespace std;")
        call append(line(".")+1, "")
endif

if expand("%:e")== 'h'
        call setline(1,"#ifndef __".expand("%:r")."_H__")
        call append(line("."),"#define __".expand("%:r")."_H__")
        call append(line(".")+1, "")
        call append(line(".")+2, "")
        call append(line(".")+3, "")
        call append(line(".")+4, "")
        call append(line(".")+5, "")
        call append(line(".")+6, "")
        call append(line(".")+7, "#endif")


endif



        "新建文件后,自动定位到文件末尾
    "autocmd BufNewFile * normal G
endfunc


"补全括号和花括号(换行四次)
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i

function! ClosePair(char)
        if getline('.')[col('.') - 1] == a:char
                return "\<Right>"
        else
                return a:char
        endif
endfunction
filetype plugin indent on

"使用tab自动补全的设定
function! CleverTab()
        if strpart( getline('.'), 0, col('.')-1 ) =~ '^\s*$'
                return "\<Tab>"
        else
                return "\<C-N>"
        endif
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>

"C,C++ 按F5编译运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
        exec "w"
        if &filetype == 'c'
                exec "!g++ % -o %<"
                exec "! %<"
        elseif &filetype == 'cpp'
                exec "!g++ % -o %<"
                exec "! %<"
        elseif &filetype == 'java'
                exec "!javac %"
                exec "!java %<"
        elseif &filetype == 'sh'
                :!./%
        elseif &filetype == 'py'
                exec "!python %"
                exec "!python %<"
        endif
endfunc

"C,C++的调试
map <F8> :call Rungdb()<CR>
func! Rungdb()
        exec "w"
        exec "!g++ % -g -o %<"
        "exec "!gdb ./%<"
endfunc


set tags+=/home/xxx/cpp_src/head          " c++代码的ctags 找到头文件执行相应的命令
"set tags+=/usr/include/ccctag                                c代码的ctags

" OmniCppComplete
let OmniCpp_DisplayMode=1           "显示类成员
let OmniCpp_NamespaceSearch = 1
let OmniCpp_GlobalScopeSearch = 1
let OmniCpp_ShowAccess = 1
let OmniCpp_ShowPrototypeInAbbr = 1 " 显示函数参数列表
let OmniCpp_MayCompleteDot = 1   " 输入 .  后自动补全
let OmniCpp_MayCompleteArrow = 1 " 输入 -> 后自动补全
let OmniCpp_MayCompleteScope = 1 " 输入 :: 后自动补全
let OmniCpp_DefaultNamespaces = ["std", "_GLIBCXX_STD"]
" 自动关闭补全窗口
au CursorMovedI,InsertLeave * if pumvisible() == 0|silent! pclose|endif
set completeopt=menuone,menu,longest

set autowriteall
set updatetime=500

"按下F12自动更新tags
map <F10> :call Rungdbe()<CR>
func! Rungdbe()
        exec "w"
        exec "!ctags -R --c++-kinds=+p --fields=+iaS --extra=+q"
endfunc

缺点

缺点 :: 补全功能太烂了

为另一个用户安装 LINUX C 的自动补全

adduser zzz

第一步,下载配置文件

  1. 创建~/.vim隐藏文件夹,这是vim的插件的配置路径
  2. 进入~/.vim
  3. 将配置好的仓库从github上下载下来,
  4. 将已经写好的配置文件.vimrc,拷贝到$HOME目录,Vim会自动读取
mkdir ~/.vim
cd ~/.vim
git clone https://github.com/ckelsel/vim-init.git
cp ~/.vim/vim-init/.vimrc ~

第二步,一键安装插件

启动Vim,执行命令,让vim-plug安装插件。
vim-plug已经集成在https://github.com/ckelsel/vim-init.git,不需要单独安装。

:PlugInstall

第三步,手动安装YouCompleteMe

YouCompleteMe是C/C++代码补全的插件,需要下载的东西比较多,自动安装过程中可能出错,因此使用手动安装的方法。

1 安装cmake
2 进入插件目录
3 下载YouCompleteMe仓库
4 进入YouCompleteMe目录,准备编译代码
5 编译安装YouCompleteMe

sudo apt-get install cmake
cd ~/.vim/bundles
git clone https://gitee.com/zhuixixi/YouCompleteMe.git --depth=1 
cd ~/.vim/bundles/YouCompleteMe
python3 install.py --clang-completer

第四步,安装插件所需要的第三方工具

  1. 安装clang-format,格式化代码的工具
  2. 安装ctags,生成tag文件
  3. 安装silversearcher-ag,搜索工具
  4. 创建clang-format的软链接,否则执行:ClangFormat的时候,提示找不到clang-format
sudo apt-get install cmake
cd ~/.vim/bundles
git clone https://gitee.com/zhuixixi/YouCompleteMe.git --depth=1
cd ~/.vim/bundles/YouCompleteMe
python3 install.py --clang-completer

我的 .vimrc 加了一些

imap  jk <Esc>
set runtimepath+=~/.vim/bundles/YouCompleteMe
nmap <space>  :


ca11 plug#begin('~/.vim/plugged")
Plug 'scrooloose/nerdtree'
Plug 'chiel92/vim-autoformat'
call plug#end()
""-----------------------------------------------NERDTree插件配置开始----------------------------------------------------------
" NerdTree才插件的配置信息
""将F2设置为开关NERDTree的快捷键
map <f2> :NERDTreeToggle<cr>
""修改树的显示图标
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
""窗口位置
let g:NERDTreeWinPos='left'
""窗口尺寸
let g:NERDTreeSize=30
""窗口是否显示行号
let g:NERDTreeShowLineNumbers=1
""不显示隐藏文件
let g:NERDTreeHidden=0
""------------------------------------------------nerdtree插件配置结束---------------------------------------------------------
"F3自动格式化代码
noremap <F3> :Autoformat<CR>
let g:autoformat_verbosemode=1
  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-08-19 18:45:50  更:2022-08-19 18:45:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/3 13:29:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码