文章

vimrc

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
"" 手动安装插件配置
set nocompatible                " 去掉vi的一致性"
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'mattn/vim-goimports'
Plugin 'mattn/vim-go'
Plugin 'mattn/vim-gocode'
Plugin 'jiangmiao/auto-pairs'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'ycm-core/YouCompleteMe'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'martinda/Jenkinsfile-vim-syntax'
Plugin 'prettier/vim-prettier', { 'do': 'npm install' }
Plugin 'tpope/vim-liquid'
Plugin 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install() } }
call vundle#end()
" 自动安装插件配置
execute pathogen#infect()
filetype plugin indent on       " 开启文件类型自动检测,编写代码时自动换行对齐

set encoding=utf-8
set langmenu=zh_CN.UTF-8
" 设置打开文件的编码格式  
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 
set fileencoding=utf-8
" 设置中文提示
language messages zh_CN.utf-8
" 设置中文帮助
set helplang=cn
" 设置为双字宽显示,否则无法完整显示如:☆
set ambiwidth=double

filetype on                     " 检测文件的类型
let skip_defaults_vim=1
" 设置外观 -------------------------------------
" colorscheme default             " Vim提供了多种颜色方案供选择 default desert molokai solarized
set showtabline=0               " 隐藏顶部标签栏"
set guioptions-=r               " 隐藏右侧滚动条"
set guioptions-=L               " 隐藏左侧滚动条"
set guioptions-=b               " 隐藏底部滚动条"
set cursorline                  " 突出显示当前行"
" set cursorcolumn                " 突出显示当前列"
set langmenu=zh_CN.UTF-8        " 显示中文菜单

" 变成辅助 -------------------------------------
syntax enable                   " 开启语法高亮
set fileformat=unix             " 设置以unix的格式保存文件"
set tabstop=4                   " 一个 tab 显示出来是多少个空格,默认 8
set softtabstop=4
set shiftwidth=4                " 统一缩进为4
set backspace+=indent,eol,start " set backspace&可以对其重置
set showmatch                   " 显示匹配的括号"
set scrolloff=5                 " 距离顶部和底部5行"
set laststatus=2                " 显示状态栏 (默认值为 1, 无法显示状态栏)
hi StatusLine ctermfg=black ctermbg=white  " 设置前景色为白,背景色为黑
" set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\
                                " 设置在状态行显示的信息
" 定义自定义的状态栏函数
function! MyStatusline()
    let l:status = ''
    " 添加自定义的状态栏内容
    let l:status .= '%<%F[%1*%M%*%n%R%H]%=\ '
    let l:status .= '%y\ '
    let l:status .= '%0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ '
    return l:status
endfunction
" set statusline=%!MyStatusline()
set statusline=%<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&fileencoding}\ %c:%l/%L%)

set autoindent                  " vim使用自动对齐,也就是把当前行的对齐格式应用到下一行(自动缩进)
set cindent                     " (cindent是特别针对 C语言语法自动缩进)
set smartindent                 " 依据上面的对齐格式,智能的选择对齐方式,对于类似C语言编写上有用

" 其他杂项 -------------------------------------
set matchtime=5
" set ignorecase                  " 忽略大小写
" set ignorecase smartcase        " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set incsearch
set hlsearch                    "高亮搜索项"
set noexpandtab                 "不允许扩展table"
set autoread                    " 自动重新读取文件
set ruler                       " 在编辑过程中,在右下角显示光标位置的状态行
" set whichwrap=b,s,h,l,[,],<,>   " 移动到行末时使用箭头键(<和>)来跳转到下一行的行头
nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
                                " 用空格键来开关折叠

" " 启用代码折叠
set foldmethod=indent           " indent: 按缩进级别折叠; manual: 手动指定折叠区域; syntax: 根据语法高亮折叠代码; expr: 使用自定义的表达式来指定折叠区域
set foldlevel=1                 " 默认折叠级别为1, 0:不折叠任何代码
set foldmarker={,}              " 使用 {} 作为折叠标记符号
set foldminlines=5              " 折叠至少包含5行代码
"set foldcolumn=2                " 在窗口的左侧显示折叠列宽度, 设置折叠的显示方式
" set foldtext=MyFoldText()       "设置自定义折叠方式
" " function! MyFoldText()
" "     " 自定义折叠文本的生成逻辑
" "     ...
" "     return foldtext
" " endfunction

" 自动跳转到上次退出的位置
if has("autocmd")
    au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

" Python 文件的一般设置,比如不要 tab 等
autocmd FileType python set tabstop=4 shiftwidth=4 expandtab
autocmd FileType python map <F12> :!python %<CR>
"===设置按F5运行Python==="

map <F5> :Autopep8<CR> :w<CR> :call RunPython()<CR>
function RunPython()
    let mp = &makeprg
    let ef = &errorformat
    let exeFile = expand("%:t")
    setlocal makeprg=python3\ -u
    set efm=%C\ %.%#,%A\ \ File\ \"%f\"\\,\ line\ %l%.%#,%Z%[%^\ ]%\\@=%m
    silent make %
    copen
    let &makeprg = mp
    let &errorformat = ef
endfunction

"===设置YouCompleteMe插件==="
let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/.ycm_extra_conf.py' " 默认配置文件路
let g:ycm_confirm_extra_conf=0                                     " 打开vim时不再询问是否加载ycm_extra_conf.py配置
set completeopt=longest,menu,menuone                               " 代码补全菜单的选项
let g:ycm_path_to_python_interpreter='/opt/homebrew/bin/python3'   " Python解释器路径
let g:ycm_seed_identifiers_with_syntax=1                           " 是否开启语义补全
let g:ycm_complete_in_comments=1                                   " 是否在注释中也开启补全
let g:ycm_min_num_of_chars_for_completion=2                        " 开始补全的字符数
let g:ycm_autoclose_preview_window_after_completion=1              " 补全后自动关机预览窗口; 0:手动
let g:ycm_cache_omnifunc=0                                         " 禁止缓存匹配项,每次都重新生成匹配项
let g:ycm_complete_in_strings = 1                                  " 字符串中也开启补全
autocmd InsertLeave * if pumvisible() == 0|pclose|endif            " 离开插入模式后自动关闭预览窗口
let g:ycm_add_preview_to_completeopt = 1                           " 是否将预览窗口添加到completeopt选项中, 1:代码补全时,预览窗口将显示候选项的详细信息
let g:ycm_show_diagnostics_ui = 1                                  " 显示诊断信息的用户界面, 1:在编辑器中显示有关代码错误和警告的信息
let g:ycm_server_log_level = 'info'                                " YCM服务器的日志级别。可以设置为debug、info、warning或error
let g:ycm_min_num_identifier_candidate_chars = 2                   " 代码补全时,触发补全的最小字符数
let g:ycm_collect_identifiers_from_comments_and_strings = 1        " 从注释和字符串中收集标识符, 1:从注释和字符串中提取标识符
let g:ycm_key_invoke_completion = '<c-z>'                          " 触发代码补全的按键

" 开启tabline
let g:airline#extensions#tabline#enabled = 1                       " tabline中当前buffer两端的分隔字符
let g:airline#extensions#tabline#left_sep = ' '                    " tabline中未激活buffer两端的分隔字符
let g:airline#extensions#tabline#left_alt_sep = '|'                " tabline中buffer显示编号
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
" let g:airline_powerline_fonts = 1                                  " 使用powerline打过补丁的字体
let g:airline_theme="dark"                                         " 设置主题


" 指定了哪些文件类型应该触发语义补全: 对于C、C++、Python、Java、Go、Erlang和Perl文件,当输入至少两个字符时,将触发语义补全
let g:ycm_semantic_triggers =  {
    \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
    \ 'cs,lua,javascript': ['re!\w{2}'],
    \ 'go,Jenkinsfile,Groovy': ['re!\w{2}'],
    \ }
" 指定文件类型启用YCM的自动补全功能: 对于C、C++、Objective-C、Shell、Zsh和Zimbu文件,将启用自动补全
let g:ycm_filetype_whitelist = {
    \ "c":1,
    \ "cpp":1,
    \ "objc":1,
    \ "sh":1,
    \ "bash":1,
    \ "zsh":1,
    \ "zimbu":1,
    \ "go":1,
    \ "Groovy":1,
    \ "Jenkinsfile":1,
    \ }
let g:ycm_key_list_select_completion = ['<CR>']                    " 在选中补全项后按回车键触发选中并插入字符
inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"             " 允许回车键触发选中补全项
"===设置 airline 插件==="
let g:airline#extensions#tabline#enabled = 1                       " tabline中当前buffer两端的分隔字符
let g:airline#extensions#tabline#left_sep = ' '                    " tabline中未激活buffer两端的分隔字符
let g:airline#extensions#tabline#left_alt_sep = '|'                " tabline中buffer显示编号
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
" let g:airline_powerline_fonts = 1                                " 使用powerline打过补丁的字体
let g:airline_theme="dark"                                         " 设置主题

"===设置 go-imports 插件==="
let g:goimports = 1                                                " 写入时启用自动格式 (默认)
let g:goimports_simplify = 1                                       " 启用简化过滤器
" 替换命令"
let g:goimports_cmd = 'goimports'
let g:goimports_simplify_cmd = 'gofmt'
let g:goimports_cmd = 'gofumports'
let g:goimports_simplify_cmd = 'gofumpt'
" goimports 替换为 gofmt
let gofmt_command = 'goimports'

"===设置 vim-prettier 插件==="
let g:prettier#autoformat = 1
"" 针对 html 文件设置 Prettier 格式化选项                                                                                                                                                                           
"autocmd FileType html let g:prettier#autoformat_config_options = { 'printWidth': 120 }
"" 针对其他文件类型设置默认的 Prettier 格式化选项
"let g:prettier#autoformat_config_options = { 'tab_width': 4, 'use_tabs': 'true' }
"" 设置文件保存时自动格式化
"autocmd BufWritePre *.js,*.jsx,*.ts,*.tsx,*.html,*.css,*.scss,*.json,*.graphql,*.md,*.vue Prettier
autocmd FileType javascript,html,typescript,json,vue,markdown,css,scss,liquid autocmd BufWritePre <buffer> :Prettier

"===设置 markdown-preview 插件==="
let g:mkdp_theme = 'default'

noremap <c-z> <NOP>
" 换行的时候可以自动跳到下一行
imap {<CR> {<CR>}<ESC>O

" shell 脚本文件类型语法高亮
autocmd BufNewFile,BufRead *.sh set filetype=sh

" 设置YAML文件的缩进
autocmd FileType yaml setlocal ai ts=2 sw=2 et


" 设置字体 
set guifont=Powerline_Consolas:h14:cANSI
本文由作者按照 CC BY 4.0 进行授权