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
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
"设置全局leader键
let mapleader = ","
let g:mapleader = ","
"""""""""常用快捷键""""""""""""
" 插入模式下kj返回normal模式
inoremap kj <Esc>
"插入模式映射上下左右
inoremap <c-j> <DOWN>
inoremap <c-k> <UP>
inoremap <c-h> <LEFT>
inoremap <c-l> <RIGHT>
" Y复制到行尾
nnoremap Y y$
" ,和k一块按去掉空行
noremap <leader>k :g/^$/d<CR>
" ,和u一块按删除重复行
noremap <leader>u :sort<CR>:g/^(.*)$\n\1$/d<CR>

"全局删除行尾空格
nnoremap <leader>w :%s/\s+$//<cr>:let @/=''<CR>

"""""""""""""""""" 分屏"""""""""""""""""""
" Disable the default s key
noremap s <nop>
" split the screens to up (horizontal), down (horizontal), left (vertical), right (vertical)
noremap sk :set nosplitbelow<CR>:split<CR>:set splitbelow<CR>
noremap sj :set splitbelow<CR>:split<CR>
noremap sh :set nosplitright<CR>:vsplit<CR>:set splitright<CR>
noremap sl :set splitright<CR>:vsplit<CR>
"逆时针旋转你的分屏
noremap sq <C-w>t<C-w>K
"顺时针旋转你的分屏
noremap se <C-w>t<C-w>H
"格式化依赖插件tab
vmap ga :Tabularize /
vmap <leader>= :Tabularize /=<CR> " =对齐
vmap <leader>: :Tabularize /:<CR> " :对齐
vmap <leader>, :Tabularize /,<CR> " ,对齐
vmap <leader># :Tabularize /#<CR> " #对齐
vmap <leader>* :Tabularize /*<CR> " *对齐
vmap <leader>' :Tabularize /'<CR> " '对齐
vmap <leader>" :Tabularize /"<CR> " " 对齐

"vim-table-mod
vmap <leader>t :Tableize<CR> " 对齐表格

""""""""""""""""功能快捷键""""""""""""""
" wildfire 只能选择映射成空格依赖插件wildfire
map s<SPACE> <Plug>(wildfire-fuel)
vmap <SPACE> <Plug>(wildfire-water)
"autocmd CmdwinEnter * nnoremap <CR> <CR>
"autocmd BufReadPost quickfix nnoremap <CR> <CR>
"加空格不进入插入模式
noremap <SPACE> i<SPACE><Esc><RIGHT>
"用tab换行
noremap <TAB> i<CR><Esc>
"noremap <S-CR> i<CR><Esc>
" 在正常模式下添加空行
noremap <CR> o<ESC>
noremap <S-Enter> O<Esc>

"""""""""""""""""""""vim-ui配置"""""""""""""""""""""'

"colorscheme lucario
"colorscheme termschool
"colorscheme seoul256
"colorscheme molokai
colorscheme gruvbox



" ======================================
" 插件配置
" ======================================

"call plug#begin('~/.vim/plugged')
call plug#begin('$HOME/.config/nvim/plugged')
"美化==================================================================
Plug 'itchyny/lightline.vim'
" 启动界面
"Plug 'zgpio/vim-startify'
Plug 'mhinz/vim-startify'
"功能==================================================================
"智能选中区域
"Plug 'zgpio/wildfire.vim'
Plug 'gcmt/wildfire.vim'
"高亮复制内容
Plug 'machakann/vim-highlightedyank'
"多光标
Plug 'mg979/vim-visual-multi', {'branch': 'master'}
"替换
Plug 'tpope/vim-surround'
"智能选中
Plug 'gcmt/wildfire.vim'
"对齐
Plug 'godlygeek/tabular'
Plug 'dhruvasagar/vim-table-mode'
call plug#end()



"开启高亮
syntax enable
" 透明显示
hi Normal ctermfg=252 ctermbg=none

""""""""""""""基本配置""""""""""""""""""""""
" 不兼容vi命令
set nocompatible
"""""""""""""""""删除而不是剪切,并且共享系统剪切板"""""""""""""""""""""""
nnoremap x "x
nnoremap X "X

nnoremap c "c
nnoremap C "C

"nnoremap d "d
"nnoremap D "D
"vnoremap d "_d

if has('unnamedplus')
set clipboard=unnamed,unnamedplus
nnoremap <leader>d "+d
nnoremap <leader>D "+D
vnoremap <leader>d "+d
else
set clipboard=unnamed
nnoremap <leader>d "d
nnoremap <leader>D "D
vnoremap <leader>d "*d
endif



"换行不自动加注释
augroup Format-Options
autocmd!
autocmd BufEnter * setlocal formatoptions-=c formatoptions-=r formatoptions-=o

" This can be done as well instead of the previous line, for setting formatoptions as you choose:
autocmd BufEnter * setlocal formatoptions=crqn2l1j

augroup END

" 光标回到上次文件打开的位置
au BufReadPost * if line("'"") > 1 && line("'"") <= line("$") | exe "normal! g'"" | endif

" 在底部状态栏显示当前模式,如插入、命令模式
set showmode

" 在命令模式下显示当前命令,如输入2y时,会在状态栏显示命令,再次输入y时,执行命令,状态栏命令消失
set showcmd

" 是否显示状态栏。0表示不显示,1表示只在多窗口时显示,2表示显示。
set laststatus=2

" 在状态栏显示光标的当前位置
set ruler

" 支持鼠标
set mouse=a

" 当前文本使用uf8编码
set encoding=utf-8

" 保留命令的历史记录数
set history=5555

"相对行号
set number relativenumber

" 设置行宽,即一行显示多少个字符
set textwidth=80

" 自动折行,即太长的行分成几行显示,关闭自动折行为set nowrap
set nowrap

" 只有遇到指定的符号(比如空格、连词号和其他标点符号),才发生折行。也就是说,不会在单词内部折行
set linebreak

" 垂直滚动时,光标距离顶部/底部的位置(单位:行)
set scrolloff=5

" 水平滚动时,光标距离行首或行尾的位置(单位:字符)。该配置在不折行时比较有用。
set sidescrolloff=10

"""""""""""""""""""""""""""" 缩进相关配置 """"""""""""""""""

" 按下tab时显示的空格数
set tabstop=4

" tab转化为多少个空格
set softtabstop=4

" 执行移位操作>>或<<时,显示的空格数
set shiftwidth=4

" 由于 tab 键在不同的编辑器缩进不一致,该设置自动将 Tab 转为空格
set expandtab

" 自动缩略,当按下回车时,自动与上一行的缩进保持一致
set autoindent

"""""""""""""""""""""""""""" 搜索相关配置 """"""""""""""""""

" 光标遇到{[()]}时,会高亮显示另一半匹配的符号
set showmatch

" 高亮显示搜索的词
set hlsearch

" 增量搜索匹配结果,即每输入一个字母都会进行匹配
set incsearch

" 搜索时忽略大小写
set ignorecase

" 如果同时打开了ignorecase,那么对于只有一个大写字母的搜索词,将大小写敏感;其他情况都是大小写不敏感
set smartcase

"""""""""""""""""""""""""""" 编辑相关配置 """"""""""""""""""
" 不创建交换文件。交换文件主要用于系统崩溃时恢复文件,文件名的开头是.、结尾是.swp
set noswapfile

" 自动切换工作目录。这主要用在一个 Vim 会话之中打开多个文件的情况,默认的工作目录是打开的第一个文件的目录。该配置可以将工作目录自动切换到,正在编辑的文件的目录。
set autochdir

" 打开文件监视。如果在编辑过程中文件发生外部改变,就会发出提示。
set autoread

" 命令模式下,底部操作指令按下 Tab 键自动补全
set wildmenu

let &t_SI = "<Esc>]50;CursorShape=1\x7"
let &t_EI = "<Esc>]50;CursorShape=0\x7"
" 设置出错不发出声音
set vb t_vb=
" 设置当前行黑色
highlight CursorLine cterm=NONE ctermbg=black ctermfg=green guibg=NONE guifg=NONE

" 高亮行

set cursorline

"""""""""""function""""""""""""
"markdown表格转换
if has("win32")
set rtp+=$HOME/.vim/after
endif

let g:table_mode_corner = '|'
let g:table_mode_border=0
let g:table_mode_fillchar=' '
let g:table_mode_delimiter=' '

function! s:isAtStartOfLine(mapping)
let text_before_cursor = getline('.')[0 : col('.')-1]
let mapping_pattern = '\V' . escape(a:mapping, '')
let comment_pattern = '\V' . escape(substitute(&l:commentstring, '%s.$', '', ''), '')
return (text_before_cursor =~? '^' . ('\v(' . comment_pattern . '\v)?') . '\s\v' . mapping_pattern . '\v$')
endfunction
inoreabbrev <expr> <bar><bar>
\ <SID>isAtStartOfLine('||') ?
\ '<c-o>:TableModeEnable<cr><bar><space><bar><left><left>' : '<bar><bar>'
inoreabbrev <expr> __
\ <SID>isAtStartOfLine('') ?
\ '<c-o>:silent! TableModeDisable<cr>' : ''

" 没有插件管理尝试自动安装plug
if empty(glob('~/.config/nvim/autoload/plug.vim'))
silent !curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif

"vscode配置
"function! s:openVSCodeCommandsInVisualMode()
" normal! gv
" let visualmode = visualmode()
" if visualmode == "V"
" let startLine = line("v")
" let endLine = line(".")
" " 最后一个参数 1 表示操作后仍处于选择模式,0 则表示操作后退出选择模式
" call VSCodeNotifyRange("workbench.action.showCommands", startLine, endLine, 1)
" else
" let startPos = getpos("v")
" let endPos = getpos(".")
" call VSCodeNotifyRangePos("workbench.action.showCommands", startPos[1], endPos[1], startPos[2], endPos[2], 1)
" endif
"endfunction
"
"" workaround for calling command picker in visual mode
"xnoremap <silent> <C-P> :<C-u>call <SID>openVSCodeCommandsInVisualMode()<CR>
"
"
"if exists('g:vscode')
" " VSCode extension
"else
" " ordinary neovim
"endif
"
"" init.vim
"nnoremap <silent> <C-j> :call VSCodeNotify('workbench.action.navigateDown')<CR>
"nnoremap <silent> <C-k> :call VSCodeNotify('workbench.action.navigateUp')<CR>
"nnoremap <silent> <C-h> :call VSCodeNotify('workbench.action.navigateLeft')<CR>
"nnoremap <silent> <C-l> :call VSCodeNotify('workbench.action.navigateRight')<CR>