vim简单使用与介绍
# vim使用介绍
照着配置了许多,也参考了许多,但是始终没有找到一个好的方法,用起来不太爽
基础的操作方法这里就不写了。网上很多。
- 全篇在linux下实践
# 基础的配置命令解释
'''
"搜索忽略大小写
set ignorecase
"搜索逐字符高亮
set hlsearch
set incsearch
"设置字体
set guifont=Consolas:h12:cANSI
"设置搜索高亮 ,取消请使用set nohlsearch
set hlsearch
" 关闭 .swp 文件
set noswapfile
" 显示行号;取消显示可输入 set nonu
set number
" 突出显示当前行
set cursorline
"去掉讨厌的有关 vim 一致性模式,避免以前版本的一些 bug 和局限.
set nocompatible
"否则无法使用退格键
set backspace=indent,eol,start
"开启语法高亮
syntax on
"设置命令历史记录为10条.
set history=100
"设置替换 tab 键 [缩进]
set expandtab
"设置 tab 键为4个空格.
set tabstop=4
set softtabstop=4
"设置当行之间交错时使用4个空格
set shiftwidth=4
"设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
"搜索选项.(比如,键入"/bo",光标自动找到第一个"bo"所在的位置.)
set noincsearch
"字符集
set fileencodings=ucs-bom,utf-8,chinese,cp936
"依据上面的对起格式,智能的选择对起方式,对于类似C语言编.
"set smartindent
"自动缩进
"set autoindent
"C风格缩进
set cindent
"设置文件类型
" set filetype=php
set filetype=go
"set filetype=html
" 用空格键来开关代码折叠
set foldenable
" 手动折叠代码
" set foldmethod=manual
" 按缩进自动折叠代码
" set foldmethod=indent
" 按语法高亮折叠代码
" set foldmethod=syntax
" 按标记折叠代码
set foldmethod=marker
" 自动写入
set autowrite
" 自动读取
set autoread
"自动缩进
set ai
'''
# 命令
>:Toc --->创建一个快速垂直窗口显示文档目录
>:Toch --->创建一个快速水平窗口显示文档目录
# 插件的使用,主要介绍如何使用插件
## 插件管理工具vim-plug
前置条件,先安装一个插件管理工具,不然一个一个的拷贝也比较复杂,不爽利。
在这里我使用的是vim-plug
- 安装vim-plug
下载:git clone
> git clone https://github.com/junegunn/vim-plug.git
将文件plug.vim拷贝到/usr/share/vim/vim80/autoload/
> sudo cp vim-plug/plug.vim /usr/share/vim/vim80/autoload/
- 使用此工具,vimrc中写入
'''
call plug#begin('~/.vim/plugged')
.....
Plug 'xxxxxxx'
.....
call plug#end()
'''
> call plug#begin('~/.vim/plugged') 插件开始的地方
> call plug#end() 插件结束的地方
> Plug 'xxxxxxx' 要使用的插件
- 当写好配置后
随意在终端中启动vim
输入
> :PlugInstall
等待插件安装完成
其它命令,自行搜索
## 代码补全
网上这种也挺多,我用的coc
- 安装依赖 nodejs 方法不一,但是系统直装的不一定能用,所以这里写了两种方法
一
> sudo apt-get install -y nodejs
二
> https://nodejs.cn/download/#google_vignette
> sudo mv node-v18.19.1-linux-x64 /usr/local/node18
sudo ln -s /usr/local/node18/bin/npm /usr/bin/npm
sudo ln -s /usr/local/node18/bin/node /usr/bin/node
- 插件安装
> Plug 'neoclide/coc.nvim', {'branch': 'release'}
- 插件使用
在配置中加入
'''
let g:coc_global_extensions = [
\ 'coc-marketplace',
\ 'coc-json',
\ 'coc-vimlsp',
\ 'coc-markdownlint',
\ 'coc-sh',
\ 'coc-pyright',
\ 'coc-yaml',
\ 'coc-tabnine',
\ 'coc-translator',
\ 'coc-snippets',
\ 'coc-java',
\ 'coc-java-intellicode',
\ 'coc-xml',
\ 'clangd',
\]
'''
配置coc
> 打开vim(nvim),命令模式下输入:CocConfig进行配置。也可以编辑默认目录下的文件~/.config/nvim/coc-settings.json
'''
{
"coc.preferences.extensionUpdateCheck": "daily",
"suggest.noselect": true,
"suggest.enablePreselect": false,
"suggest.autoTrigger": "always",
"suggest.timeout": 5000,
"suggest.enablePreview": true,
"suggest.floatEnable": true,
"suggest.detailField": "preview",
"suggest.snippetIndicator": "",
"suggest.triggerCompletionWait": 100,
"suggest.echodocSupport": true,
"suggest.completionItemKindLabels": {
"class": "\uf0e8",
"color": "\ue22b",
"constant": "\uf8fe",
"default": "\uf29c",
"enum": "\uf435",
"enumMember": "\uf02b",
"event": "\ufacd",
"field": "\uf93d",
"file": "\uf723",
"folder": "\uf115",
"function": "\u0192",
"interface": "\uf417",
"keyword": "\uf1de",
"method": "\uf6a6",
"module": "\uf40d",
"operator": "\uf915",
"property": "\ue624",
"reference": "\ufa46",
"snippet": "\ue60b",
"struct": "\ufb44",
"text": "\ue612",
"typeParameter": "\uf728",
"unit": "\uf475",
"value": "\uf89f",
"variable": "\ue71b"
},
"diagnostic.errorSign": "\uf467",
"diagnostic.warningSign": "\uf071",
"diagnostic.infoSign": "\uf129",
"diagnostic.hintSign": "\uf864",
"diagnostic.displayByAle": false,
"diagnostic.refreshOnInsertMode": false,
"diagnostic.checkCurrentLine": true,
"diagnostic.virtualTextPrefix": " ❯❯❯ ",
"diagnostic.virtualText": true,
"codeLens.enable": true,
"list.previewHighlightGroup": "Statement",
// 保存时调整格式
"coc.preferences.formatOnSaveFiletypes": [
"javascript",
"typescript",
"html",
"css",
"json",
"java",
"python",
"vue",
"c",
"cpp",
"markdown",
"lua",
"bash"
],
"snippets.ultisnips.directories": [
"$HOME/.vim/plugged/vim-snippets/UltiSnips"
],
"coc.preferences.snippetStatusText": "Ⓢ ",
"python.formatting.provider": "black",
"java.configuration.runtimes": [
{
"name": "JavaSE-17",
"path": "/usr/lib/jvm/java-17-openjdk-amd64"
},
{
"name": "JavaSE-1.8",
"path": "/usr/lib/jvm/jdk1.8.0_202/bin/java",
"default": true
}
],
"languageserver": {
"bash": {
"command": "bash-language-server",
"args": [
"start"
],
"filetypes": [
"sh"
]
}
},
"yaml.format.enable": true
}
'''
## NERDTree
这个插件是几乎所有研发人员都会安装的一个插件——目录树,可以支持在不退出vim的编辑器的前提下,
在文件中快速切换,同时能让开发人员快速掌握项目目录结构,
是提升开发效率必不可少的工具。预览结果如下图所示:
- 插件安装
> Plug 'preservim/nerdtree'
- 配置
## auto-pairs
这个就是插件的功能简单而实用:在输入/删除左括号时,能自动补上/删除右括号。
具体功能如下:
![alt text](image.png)
- 安装
>Plug 'jiangmiao/auto-pairs'
使用
开箱即用的插件,无需过多的配置。
'''
au Filetype FILETYPE let b:AutoPairs = {"(": ")"}
au FileType php let b:AutoPairs = AutoPairsDefine({'<?' : '?>', '<?php': '?>'})
'''
## vim-airline
vim-airline是vim的底部状态增强/美化插件
其中vim-airline-themes是主题插件,可以使得状态栏的颜色更加丰富。
- 安装
>Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
- 配置
'''
set laststatus=2 "永远显示状态栏
let g:airline_powerline_fonts = 1 " 支持 powerline 字体
let g:airline#extensions#tabline#enabled = 1 “ 显示窗口tab和buffer
let g:airline_theme='moloai' " murmur配色不错
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.branch = '⎇'
'''
## ag
> sudo apt-get install silversearcher-ag
> Plug 'mileszs/ack.vim'
'''
if executable('ag')
let g:ackprg = 'ag --vimgrep'
endif
let g:ackprg = 'ag --nogroup --nocolor --column'
map <F2> :Ack<space>
'''
# 附录
'''
"搜索忽略大小写
set ignorecase
"搜索逐字符高亮
set hlsearch
set incsearch
"设置字体
set guifont=Consolas:h12:cANSI
"设置搜索高亮 ,取消请使用set nohlsearch
set hlsearch
" 关闭 .swp 文件
set noswapfile
" 显示行号;取消显示可输入 set nonu
set number
" 突出显示当前行
set cursorline
"去掉讨厌的有关 vim 一致性模式,避免以前版本的一些 bug 和局限.
set nocompatible
"否则无法使用退格键
set backspace=indent,eol,start
"开启语法高亮
syntax on
"设置命令历史记录为10条.
set history=100
"设置替换 tab 键 [缩进]
set expandtab
"设置 tab 键为4个空格.
set tabstop=4
set softtabstop=4
"设置当行之间交错时使用4个空格
set shiftwidth=4
"设置匹配模式,类似当输入一个左括号时会匹配相应的那个右括号
set showmatch
"搜索选项.(比如,键入"/bo",光标自动找到第一个"bo"所在的位置.)
set noincsearch
"字符集
set fileencodings=ucs-bom,utf-8,chinese,cp936
"依据上面的对起格式,智能的选择对起方式,对于类似C语言编.
"set smartindent
"自动缩进
"set autoindent
"C风格缩进
set cindent
"设置文件类型
" set filetype=php
set filetype=go
"set filetype=html
" 用空格键来开关代码折叠
set foldenable
" 手动折叠代码
" set foldmethod=manual
" 按缩进自动折叠代码
" set foldmethod=indent
" 按语法高亮折叠代码
" set foldmethod=syntax
" 按标记折叠代码
set foldmethod=marker
" 自动写入
set autowrite
" 自动读取
set autoread
"---------------------------------------------------------------------
" 文件树的设置
nmap <Leader><Leader> :NERDTreeToggle<CR>
let NERDTreeWinSize=32
" 设置NERDTree子窗口宽度
let NERDTreeWinPos="left" " 设置NERDTree子窗口位置
let NERDTreeShowHidden=1 " 显示隐藏文件
let NERDTreeMinimalUI=1 " NERDTree 子窗口中不显示冗余帮助信息
let g:rainbow_conf = {
\ 'guifgs': ['royalblue3', 'darkorange3', 'seagreen3', 'firebrick'],
\ 'ctermfgs': ['lightblue', 'lightyellow', 'lightcyan', 'lightmagenta'],
\ 'operators': '_,\|+\|-_',
\ 'parentheses': ['start=/(/ end=/)/ fold', 'start=/\[/ end=/\]/ fold', 'start=/{/ end=/}/ fold'],
\ 'separately': {
\ '*': {},
\ 'tex': {
\ 'parentheses': ['start=/(/ end=/)/', 'start=/\[/ end=/\]/'],
\ },
\ 'css': 0,
\ }
\}
"---------------------------------------------------------------------
"主题gruvbox
autocmd vimenter * nested colorscheme gruvbox
set bg=dark
”--------------------------------------------------------------------
"搜索
if executable('ag')
let g:ackprg = 'ag --vimgrep'
endif
let g:ackprg = 'ag --nogroup --nocolor --column'
map <F2> :Ack<space>
”--------------------------------------------------------------------
"窗口管理 WinManager
let g:winManagerWindowLayout='FileExplorer|TagList' "FileExplorer和TagList同时在左边窗口显示
" let g:winManagerWindowLayout='FileExplorer,TagList' "FileExplorer和TagList同时仅有一个在左边窗
let g:persistentBehaviour=0 " 如果所有编辑文件都关闭了,退出vim
nmap wm :WMToggle<cr> " 打开/关闭WinManager
”--------------------------------------------------------------------
“ ctags
let Tlist_Ctags_Cmd='ctags' "taglist依赖于ctags,设置ctags位置
let Tlist_Use_Right_Window=0 "窗口显示:1--右边,0--左边
let Tlist_Show_One_File=1 "显示一个文件:1--是 0--否
let Tlist_File_Fold_Auto_Close=1 "非当前文件,函数列表折叠隐藏
let Tlist_GainFocus_On_ToggleOpen = 1 "打开taglist时,光标保留在taglist窗口
let Tlist_Exit_OnlyWindow=1 "当taglist是最后一个分割窗口时,自动退出vim
let Tlist_Process_File_Always=1 "实时更新tags 1--是 0--否
let Tlist_Inc_Winwidth=0
nmap <leader>tl :Tlist<CR>
”--------------------------------------------------------------------
“ markdown
let g:vim_markdown_folding_disabled=1 "禁用折叠
let g:vim_markdown_initial_foldlevel=1
"let g:vim_markdown_no_default_key_mappings=1 "禁用默认键
"对文件名后缀为md,mdown,mkd,mkdn,markdown,mdwn的文件,使用markdown语法
au BufRead,BufNewFile *.{md,mdown,mkd,mkdn,markdown,mdwn} set filetype=mkd
”--------------------------------------------------------------------
" coc 代码补全
let g:coc_global_extensions = [
\ 'coc-marketplace',
\ 'coc-json',
\ 'coc-vimlsp',
\ 'coc-markdownlint',
\ 'coc-sh',
\ 'coc-pyright',
\ 'coc-yaml',
\ 'coc-tabnine',
\ 'coc-translator',
\ 'coc-snippets',
\ 'coc-java',
\ 'coc-java-intellicode',
\ 'coc-xml',
\]
”--------------------------------------------------------------------
" auto-pairs 括弧补全
au Filetype FILETYPE let b:AutoPairs = {"(": ")"}
au FileType php let b:AutoPairs = AutoPairsDefine({'<?' : '?>', '<?php': '?>'})
”--------------------------------------------------------------------
" vim-airline
set laststatus=2 "永远显示状态栏
let g:airline_powerline_fonts = 1 " 支持 powerline 字体
let g:airline#extensions#tabline#enabled = 1 “ 显示窗口tab和buffer
let g:airline_theme='moloai' " murmur配色不错
if !exists('g:airline_symbols')
let g:airline_symbols = {}
endif
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'
let g:airline_symbols.linenr = '¶'
let g:airline_symbols.branch = '⎇'
”--------------------------------------------------------------------
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
Plug 'vim-scripts/taglist.vim'
Plug 'MwumLi/WinManager'
Plug 'mileszs/ack.vim'
Plug 'morhetz/gruvbox'
Plug 'plasticboy/vim-markdown'
Plug 'neoclide/coc.nvim', {'branch': 'release'}
Plug 'jiangmiao/auto-pairs'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
call plug#end()
“---------------------------------------------------------------------
'''