mac下配置vim

mac 下配置 vim

安装 mac vim

mac 预装了 vim,但官方的 vim 在 Mac 上只有一个很不完善的,长期没人维护的 Carbon 图形用户界面。macvim 主要是在此基础上添加了一个完整的 Cocoa 用户界面,其核心部分和 vim 同步。MacVim 采用了分离进程的方式,一个 MacVim 程序可以启动多个 vim 进程,每个显示在一个 MacVim 窗口中,这是官方的 vim 和其他平台下的 gvim 所不支持的。MacVim 还支持很多 Mac OS X 原生的界面特性,比如工具栏、滚动条、全屏显示、Mac 菜单快捷键的绑定等。

安装 vim-plug

下载

1
2
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

配置

新建一个目录用于存放下载的插件

1
mkdir ~/.vim/plugged

vim-plug 的基本使用

vim-plug 安装后,下面介绍下如何使用:

1、先编辑~/.vimrc 文件,键入如下内容:

1
2
3
call plug#begin('~/.vim/plugged')
Plug 'scrooloose/nerdtree'
call plug#end()

2、终端键入 vim,然后回车,进入 vim 编辑器,键入如下内容进入命令模式,然后回车:

1
:PlugInstall

Issue:

由于中文网络环境的某种原因,您可能会遇到vim-plug插件无法下载的问题: vim-plug它依赖github上的开源软件,而github常常无法被正常访问。

解决之法有二:

其一,给命令行挂代理。此法相对复杂,并非简单执行一行命令就完事。提供下思路: 先开启某科学上网的socks5代理或自己ssh -D上自己的机场,使用privoxy转为http代理,然后执行export http_proxy=http://127.0.0.1:8118
其二,通过修改Plug.vim文件中的下载地址为国内的镜像站。

1
vi  ~/.vim/autoload/plug.vim 

在 plug.vim 中搜索 github, 修改两条语句,即可成功下载GitHub资源。 

第一部分:


1
let fmt = get(g:, 'plug_url_format', 'https://git::@github.com/%s.git')

改为
1
let fmt = get(g:, 'plug_url_format', 'https://git::@hub.fastgit.org/%s.git')

第二部分:


1
\ '^https://git::@github\.com', 'https://github.com', '')

改为

1
\ '^https://git::@hub.fastgit\.org', 'https://hub.fastgit.org', '')

参考: https://blog.csdn.net/htx1020/article/details/114364510

常用的命令:

查看插件安装状态:

1
:PlugStatus

删除插件的方法:

  1. 先注释~/.vimrc 文件中插件
1
" Plug 'scrooloose/nerdtreee'

2)重启 vim 编辑器

或者

执行:

1
source ~/.vimrc

更新:
编辑完vimrc之后用

source /etc/vimrc报错

-bash: /etc/vimrc: line 15: syntax error near unexpected token "autocmd"' -bash: /etc/vimrc: line 15: if has(“autocmd”)’

以为是语法问题

实际原因:vimrc是vim起动时解释的,而不是由shell来解释。用shell来source它肯定不行。

最后执行:

1
:PlugClean

安装 molokai 主题

1
cd ~/.vim/
1
git clone https://github.com/tomasr/molokai.git
1
2
cd molokai
cp -r colors ../

配置 Java 环境

代码自动补全

issue:
怎么让Mac里的vim支持python3?
2019 年后 brewhome 安装的和升级 vim 都支持 python3,你可以先升级 brewhome

1
brew update

在重新安装或者直接升级

1
brew install vim

或者

1
brew upgrade

重新启动终端后就可以查看支持 python3

1
vim --versiongrep python

温馨提示:将鼠标放在语句上可以显示对应的英文。 或者 切换至中英文显示
在具有+python3 支持的 Mac OS 上安装 Vim 时,出现以下错误:

% brew install vim –with-python3
Usage: brew install [options] formula

Error: invalid option: –with-python3
macos vim homebrew
1 个回复
按投票数排序按时间排序
===============>>#1 票数:0
自 2019 年起,默认情况下已通过 Homebrew 在 Vim 上启用 +python3 。互联网上较旧的说明不准确(为了避免提高搜索排名,我不会链接到它们)。

只需通过 Homebrew 安装/升级:

% brew uninstall vim # optional, only if you previously installed it
% brew install vim
验证+python3 :

% /usr/local/bin/vim –version

+cmdline_compl +lambda +profile +virtualedit
+cmdline_hist +langmap -python +visual
+cmdline_info +libcall +python3 +visualextra
+comments +linebreak +quickfix +viminfo
+conceal +lispindent +reltime +vreplace

注意,您仍然会安装系统默认的 Vim,并且可能在安装 Homebrew 版本之前的 PATH 中,因此,如果执行 vim –version ,它不会显示+python3 :

尝试重新启动终端
尝试 alias vim=/usr/local/bin/vim
试调整 PATH 变量,将 Homebrew 的 Vim 放在首位。 “ 在 Mac 上编辑 PATH 变量 ”具有其他信息。

如果系统是ubuntu,安装openjdk8命令如下:
sudo apt-get install openjdk-8-jdk

vim 配置文件

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
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587

"==========================================
" 基本设置
"==========================================




"默认文件夹
cd /Users/admin/Documents/prj/develop



" 编码
set encoding=utf-8


" 不和 vi 兼容
set nocompatible


" 备份和撤销文件
set nobackup
set noswapfile


if has('persistent_undo')
set undofile
set undodir=~/.vim/undodir
if !isdirectory(&undodir)
call mkdir(&undodir, 'p', 0700)
endif
endif


" 中文
set fileencodings=ucs-bom,utf-8,gb18030,latin1,gbk,gb2312,cp936
set termencoding=utf-8


" 鼠标支持
if has('mouse')
if has('gui_running') || (&term =~ 'xterm' && !has('mac'))
set mouse=a
else
set mouse=nvi
endif
endif

" 共享剪贴板
set clipboard=unnamed


" 设置文本菜单
if has('gui_running')
let do_syntax_sel_menu = 1
let do_no_lazyload_menus = 1
endif


if !has('gui_running')
if has('wildmenu')
set wildmenu
set cpoptions-=<
set wildcharm=<C-Z>
nnoremap <F10> :emenu <C-Z>
inoremap <F10> <C-O>:emenu <C-Z>
endif
endif


" 查找
set ignorecase
set smartcase
set hlsearch
set incsearch


nnoremap <silent> <F2> :nohlsearch<CR>
inoremap <silent> <F2> <C-O>:nohlsearch<CR>


set scrolloff=1












"==========================================
" 显示设置
"==========================================
" 显示行号
set number


" 设置缩进
set shiftwidth=2
set tabstop=2


" 突出显示当前行
set cursorline


" 启动 vim 时关闭折叠代码
set nofoldenable


" 主题
syntax enable
colorscheme molokai
set background=dark


" 背景透明
hi Normal ctermfg=252 ctermbg=none


" 将字体设置为Meslo LG S DZ Regular for Powerline 13号大小
set guifont=Meslo\ LG\ S\ DZ\ Regular\ for\ Powerline:h13


set laststatus=2 " 必须设置为2,否则状态栏不显示
set t_Co=256 " 开启256颜色之后,colorschema在vim里好看了许多












"==========================================
" vim-plug
"==========================================


call plug#begin('~/.vim/plugged')



" -----------------------------------------------
" 代码自动补全
" -----------------------------------------------
" java https://github.com/artur-shaik/vim-javacomplete2
Plug 'artur-shaik/vim-javacomplete2'

" -----------------------------------------------
" 美化
" -----------------------------------------------
" 配色方案.
Plug 'jakwings/vim-colors'
Plug 'flazz/vim-colorschemes'
" theme color
Plug 'tomasr/molokai' | Plug 'altercation/solarized'


" 彩虹括号
Plug 'luochen1990/rainbow'




" -----------------------------------------------
" 树形目录
" -----------------------------------------------
Plug 'scrooloose/nerdtree' " https://github.com/preservim/nerdtree
Plug 'jistr/vim-nerdtree-tabs' " https://github.com/jistr/vim-nerdtree-tabs
Plug 'Xuyuanp/nerdtree-git-plugin' " https://github.com/Xuyuanp/nerdtree-git-plugin
Plug 'ryanoasis/vim-devicons' " https://github.com/ryanoasis/vim-devicons
Plug 'tiagofumo/vim-nerdtree-syntax-highlight' " https://github.com/tiagofumo/vim-nerdtree-syntax-highlight
Plug 'tpope/vim-eunuch' " https://github.com/tpope/vim-eunuch


map <C-n> :NERDTreeToggle<CR>


let NERDTreeMinimalUI = 1
let NERDTreeShowHidden = 1


let g:nerdtree_tabs_open_on_console_startup = 1


" 开发的过程中,我们希望git信息直接在NERDTree中显示出来, 和Eclipse一样,修改的文件和增加的文件都给出相应的标注, 这时需要安装的插件就是 nerdtree-git-plugin,配置信息如下
let g:NERDTreeGitStatusIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }


" i 在新的水平分割的窗口中打开
" s 在新的竖直分割的窗口中打开
" t 在标签页中打开
" go 预览文件
" r 刷新光标所在的目录
" R 刷新当前根路径
" I 显示隐藏文件
" m 显示文件操作菜单
" C 将根路径设置为光标所在的目录
" u 设置上级目录为根路径
" gT 前一个 tab
" gt 后一个 tab
" <C-W> 加方向键(h、j、k、l、<Left> 等)可以在窗口之间跳转
" <C-W> + w 跳转到下一个窗口
" <C-W> + s 和 :split 作用相同,把当前窗口横向一分为二
" <C-W> + v 和 :vsplit 作用相同,把当前窗口纵向一分为二
" <C-W> + o 或 :only 只保留当前窗口,关闭其他所有窗口




" 组合快捷键:nnoremap是什么意思?——简单来说,nnoremap将一个组合快捷键映射为另一个快捷键。no部分,指的是在Vim的正常模式(Normal Mode)下,而不是可视模式下重新映射
nnoremap <C-J> <C-W><C-J> " 组合快捷键:- Ctrl-j 切换到下方的分割窗口
nnoremap <C-K> <C-W><C-K> " 组合快捷键:- Ctrl-k 切换到上方的分割窗口
nnoremap <C-L> <C-W><C-L> " 组合快捷键:- Ctrl-l 切换到右侧的分割窗口
nnoremap <C-H> <C-W><C-H> " 组合快捷键:- Ctrl-h 切换到左侧的分割窗口
















" -----------------------------------------------
" 标签
" -----------------------------------------------
Plug 'majutsushi/tagbar' " https://github.com/majutsushi/tagbar


nnoremap <F9> :TagbarToggle<CR>
inoremap <F9> <C-O>:TagbarToggle<CR>


let g:tagbar_type_typescript = {
\ 'ctagsbin' : 'tstags',
\ 'ctagsargs' : '-f-',
\ 'kinds': [
\ 'e:enums:0:1',
\ 'f:function:0:1',
\ 't:typealias:0:1',
\ 'M:Module:0:1',
\ 'I:import:0:1',
\ 'i:interface:0:1',
\ 'C:class:0:1',
\ 'm:method:0:1',
\ 'p:property:0:1',
\ 'v:variable:0:1',
\ 'c:const:0:1',
\ ],
\ 'sort' : 0
\ }












" -----------------------------------------------
" 自动补全
" -----------------------------------------------
Plug 'Valloric/YouCompleteMe' " https://github.com/ycm-core/YouCompleteMe
Plug 'Raimondi/delimitMate' " https://github.com/Raimondi/delimitMate


nnoremap <Leader>fi :YcmCompleter FixIt<CR>
nnoremap <Leader>gd :YcmCompleter GoToDefinition<CR>












" -----------------------------------------------
" 语法高亮,检查
" -----------------------------------------------
Plug 'sheerun/vim-polyglot' " https://github.com/sheerun/vim-polyglot
Plug 'w0rp/ale' " https://github.com/w0rp/ale


let g:ale_fix_on_save = 1
let g:ale_sign_column_always = 1
let g:ale_sign_error = '●'
let g:ale_sign_warning = '▶'


nmap <silent> <C-k> <Plug>(ale_previous_wrap)
nmap <silent> <C-j> <Plug>(ale_next_wrap)










" -----------------------------------------------
" 全局搜索,快速打开文件
" -----------------------------------------------
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " https://github.com/junegunn/fzf
Plug 'junegunn/fzf.vim' " https://github.com/junegunn/fzf.vim
Plug 'ctrlpvim/ctrlp.vim' " https://github.com/ctrlpvim/ctrlp.vim


let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard']
let g:ctrlp_regexp = 1


" <c-r>: 切换匹配模式
" <c-t>:在新的 tab 中打开
" :Rg












" -----------------------------------------------
" 状态条
" -----------------------------------------------
Plug 'vim-airline/vim-airline' " https://github.com/vim-airline/vim-airline
Plug 'vim-airline/vim-airline-themes' " https://github.com/vim-airline/vim-airline-themes


let g:airline_theme='molokai'
let g:airline_powerline_fonts = 1


let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline#extensions#ale#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#nerdtree_statusline = 0
let g:airline_section_c = ''












" -----------------------------------------------
" 注释
" -----------------------------------------------
Plug 'scrooloose/nerdcommenter' " https://github.com/preservim/nerdcommenter


let g:NERDSpaceDelims = 1
let g:NERDDefaultAlign = 'left'


" <leader>c<space> 注释/取消注释
" <leader>ca 切换 // 和 /* */
" <leader>cs /* 块注释 */
" <leader>cm 只用一组符号注释
" <leader>cA 在行尾添加注释












" -----------------------------------------------
" git
" -----------------------------------------------
Plug 'airblade/vim-gitgutter' " https://github.com/airblade/vim-gitgutter
Plug 'tpope/vim-fugitive' " https://github.com/tpope/vim-fugitive
Plug 'tpope/vim-rhubarb' " https://github.com/tpope/vim-rhubarb


set updatetime=100
let g:gitgutter_max_signs = -1


" jump to next hunk: ]c
" jump to previous hunk: [c
" stage the hunk: <Leader>hs
" undo the hunk: <Leader>hu
" preview the hunk: <Leader>hp


" :G
" :Gvdiffsplit
" :GBrowse
"
" s: 加到暂存区中
" u: 重置加入暂存区的修改
" X: 丢弃修改
" ca: 更改上一次提交
" ce: 使用上一次提交
" =: 切换 diff 显示
" cc: 提交当前暂存区中的文件












" -----------------------------------------------
" Markdown
" -----------------------------------------------
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install' } " https://github.com/iamcco/markdown-preview.nvim


" :MarkdownPreview
" :MarkdownPreviewStop












" -----------------------------------------------
" Emmet
" -----------------------------------------------
Plug 'mattn/emmet-vim' " https://github.com/mattn/emmet-vim


let g:user_emmet_leader_key='<C-Z>'


" <C-Z>,












" -----------------------------------------------
" Prettier
" -----------------------------------------------
Plug 'prettier/vim-prettier', { 'do': 'npm install' } " https://github.com/prettier/vim-prettier


autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql,*.md,*.vue,*.yaml,*.html PrettierAsync


" :PrettierAsync












" -----------------------------------------------
" Wakatime
" -----------------------------------------------
Plug 'wakatime/vim-wakatime' " https://github.com/wakatime/vim-wakatime












" -----------------------------------------------
" Whitespace
" -----------------------------------------------
Plug 'ntpeters/vim-better-whitespace' " https://github.com/ntpeters/vim-better-whitespace


let g:better_whitespace_enabled=1


" :StripWhitespace












call plug#end()


" PlugInstall
" PlugUpdate
" PlugClean
" PlugUpgrade
" PlugStatus
" PlugDiff
" PlugSnapshot













更新: 2022-2-19 04:22:41 版

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
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
"==========================================
" 基本设置
"==========================================



"默认文件夹
"cd /Users/admin/Documents/prj/develop


autocmd FileType java setlocal omnifunc=javacomplete#Complete

" 编码
set enc=utf-8


" 不和 vi 兼容
set nocompatible

" 不要用空格代替制表符
set noexpandtab

" 在行和段开始处使用制表符
set smarttab

" Tab键的宽度
set tabstop=4

" 统一缩进为4
set softtabstop=4
set shiftwidth=4

" 自动缩进
set autoindent
set cindent

" 字符间插入的像素行数目
set linespace=0

" 使回格键(backspace)正常处理indent, eol, start等
set backspace=2

" 在被分割的窗口间显示空白,便于阅读
set fillchars=vert:\ ,stl:\ ,stlnc:\

" 备份和撤销文件
set nobackup
set noswapfile

" 输入的命令显示出来,看的清楚些
"set showcmd

" 允许折叠
set foldenable
" 手动折叠
set foldmethod=manual

" 显示中文帮助
" wget https://sourceforge.net/projects/vimcdoc/files/vimcdoc/vimcdoc-2.1.0.tar.gz/download -O vimcdoc-2.1.0.tar.gz
" tar -xzvf vimcdoc-2.1.0.tar.gz
" mv vimcdoc-2.1.0/doc ~/.vim/
if version >= 603

set helplang=cn

set encoding=utf-8

endif

if has('persistent_undo')
set undofile
set undodir=~/.vim/undodir
if !isdirectory(&undodir)
call mkdir(&undodir, 'p', 0700)
endif
endif


" 中文
set fileencodings=ucs-bom,utf-8,gb18030,latin1
set encoding=utf-8
set termencoding=utf-8

" 鼠标支持
if has('mouse')
if has('gui_running') || (&term =~ 'xterm' && !has('mac'))
set mouse=a
else
set mouse=nvi
endif
endif

" 共享剪贴板
set clipboard=unnamed


" 设置文本菜单
if has('gui_running')
let do_syntax_sel_menu = 1
let do_no_lazyload_menus = 1
endif


if !has('gui_running')
if has('wildmenu')
set wildmenu
set cpoptions-=<
set wildcharm=<C-Z>
nnoremap <F10> :emenu <C-Z>
inoremap <F10> <C-O>:emenu <C-Z>
endif
endif


" 查找
" 搜索忽略大小写
set ignorecase
"
set smartcase
" 搜索逐字符高亮
set hlsearch
set incsearch


nnoremap <silent> <F2> :nohlsearch<CR>
inoremap <silent> <F2> <C-O>:nohlsearch<CR>


set scrolloff=1












"==========================================
" 显示设置
"==========================================
" 显示行号
set number

" 设置相对行号
set relativenumber

" 设置缩进
set shiftwidth=2
set tabstop=2


" 突出显示当前行
set cursorline


" 启动 vim 时关闭折叠代码
set nofoldenable


" 主题
syntax enable
colorscheme molokai
set background=dark


" 背景透明
hi Normal ctermfg=252 ctermbg=none


" 将字体设置为Meslo LG S DZ Regular for Powerline 13号大小
set guifont=Meslo\ LG\ S\ DZ\ Regular\ for\ Powerline:h13


set laststatus=2 " 必须设置为2,否则状态栏不显示
set t_Co=256 " 开启256颜色之后,colorschema在vim里好看了许多








"==========================================
" vim-plug
"==========================================


call plug#begin('~/.vim/plugged')

" Surround
Plug 'tpope/vim-surround'
" python自动补全
" Python autocompletion, go to definition.
Plug 'davidhalter/jedi-vim'
" Better autocompletion
Plug 'Shougo/neocomplcache.vim'
if has('python')
" YAPF formatter for Python
Plug 'pignacio/vim-yapf-format'
endif

" python 自动补全
" wget https://github.com/rkulla/pydiction/archive/master.zip
" unzip -q master
" mv pydiction-master pydiction
" mkdir -p ~/.vim/tools/pydiction
" cp -r pydiction/after ~/.vim
" cp pydiction/complete-dict ~/.vim/tools/pydiction
"
filetype plugin on
let g:pydiction_location = '~/.vim/tools/pydiction/complete-dict'


" -----------------------------------------------
" 代码自动补全
" -----------------------------------------------
Plug 'Valloric/YouCompleteMe'
" *********************************************
" YCM插件相关
" *********************************************
let g:ycm_autoclose_preview_window_after_completion=1
" 跳转到定义处
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
" 默认tab、s-tab和自动补全冲突
let g:ycm_key_list_select_completion = ['<TAB>', '<c-n>', '<Down>']
let g:ycm_key_list_previous_completion = ['<S-TAB>', '<c-p>', '<Up>']
let g:ycm_auto_trigger = 1
" java https://github.com/artur-shaik/vim-javacomplete2
Plug 'artur-shaik/vim-javacomplete2'
autocmd FileType java setlocal omnifunc=javacomplete#Complete
let g:SuperTabDefaultCompletionType = '<C-x><C-o>'
"inoremap <buffer> <C-X><C-U> <C-X><C-U><C-P>
"inoremap <buffer> <C-S-Space> <C-X><C-U><C-P>
autocmd FileType java set completefunc=javacomplete#CompleteParamsInfo
autocmd FileType java inoremap <expr><CR> pumvisible()?"\<C-Y>":"<CR>"
autocmd FileType java inoremap <buffer> . .<C-X><C-O><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> A A<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> B B<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> C C<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> D D<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> E E<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> F F<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> G G<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> H H<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> I I<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> J J<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> K K<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> L L<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> M M<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> N N<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> O O<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> P P<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> Q Q<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> R R<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> S S<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> T T<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> U U<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> V V<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> W W<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> X X<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> Y Y<C-N><C-P>
autocmd Filetype java,javascript,css,html,xml inoremap <buffer> Z Z<C-N><C-P>


" ==========================================
" LSP 补全方式
"
" 需要额外安装language server, 如果不想要自己可以注释掉
"
" 参考: https://web.archive.org/web/20211021091123/https://www.kawabangga.com/posts/3745
"
" memo: 没有生效,暂时弃坑!
"
" =====================================================
"Plug 'prabirshrestha/async.vim'
"Plug 'prabirshrestha/asyncomplete.vim'
"Plug 'prabirshrestha/vim-lsp'
"Plug 'prabirshrestha/asyncomplete-lsp.vim'

"inoremap <expr> <Tab> pumvisible() ? "\<C-n>" : "\<Tab>"
"inoremap <expr> <S-Tab> pumvisible() ? "\<C-p>" : "\<S-Tab>"
"inoremap <expr> <cr> pumvisible() ? "\<C-y>\<cr>" : "\<cr>"
" bash lsp(language server)
" https://github.com/bash-lsp/bash-language-server
" 先在终端执行: npm i -g bash-language-server
" For Vim 8 or later install the plugin prabirshrestha/vim-lsp and add the following configuration to .vimrc:
"if executable('bash-language-server')
" au User lsp_setup call lsp#register_server({
" \ 'name': 'bash-language-server',
" \ 'cmd': {server_info->[&shell, &shellcmdflag, 'bash-language-server start']},
" \ 'whitelist': ['sh'],
" \ })
"endif



" -----------------------------------------------
" 美化
" -----------------------------------------------
" 配色方案.
Plug 'jakwings/vim-colors'
Plug 'flazz/vim-colorschemes'
" theme color
Plug 'tomasr/molokai' | Plug 'altercation/solarized'


" 彩虹括号
Plug 'luochen1990/rainbow'




" -----------------------------------------------
" 树形目录
" -----------------------------------------------
Plug 'scrooloose/nerdtree' " https://github.com/preservim/nerdtree
Plug 'jistr/vim-nerdtree-tabs' " https://github.com/jistr/vim-nerdtree-tabs
Plug 'Xuyuanp/nerdtree-git-plugin' " https://github.com/Xuyuanp/nerdtree-git-plugin
Plug 'ryanoasis/vim-devicons' " https://github.com/ryanoasis/vim-devicons
Plug 'tiagofumo/vim-nerdtree-syntax-highlight' " https://github.com/tiagofumo/vim-nerdtree-syntax-highlight
Plug 'tpope/vim-eunuch' " https://github.com/tpope/vim-eunuch


map <C-n> :NERDTreeToggle<CR>


let NERDTreeMinimalUI = 1
let NERDTreeShowHidden = 1


let g:nerdtree_tabs_open_on_console_startup = 1


" 开发的过程中,我们希望git信息直接在NERDTree中显示出来, 和Eclipse一样,修改的文件和增加的文件都给出相应的标注, 这时需要安装的插件就是 nerdtree-git-plugin,配置信息如下
let g:NERDTreeGitStatusIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }

" open nerdtree with the current file selected
nmap ,t :NERDTreeFind<CR>

" i 在新的水平分割的窗口中打开
" s 在新的竖直分割的窗口中打开
" t 在标签页中打开
" go 预览文件
" r 刷新光标所在的目录
" R 刷新当前根路径
" I 显示隐藏文件
" m 显示文件操作菜单
" C 将根路径设置为光标所在的目录
" u 设置上级目录为根路径
" gT 前一个 tab
" gt 后一个 tab
" <C-W> 加方向键(h、j、k、l、<Left> 等)可以在窗口之间跳转
" <C-W> + w 跳转到下一个窗口
" <C-W> + s 和 :split 作用相同,把当前窗口横向一分为二
" <C-W> + v 和 :vsplit 作用相同,把当前窗口纵向一分为二
" <C-W> + o 或 :only 只保留当前窗口,关闭其他所有窗口




" 组合快捷键:nnoremap是什么意思?——简单来说,nnoremap将一个组合快捷键映射为另一个快捷键。no部分,指的是在Vim的正常模式(Normal Mode)下,而不是可视模式下重新映射
nnoremap <C-J> <C-W><C-J> " 组合快捷键:- Ctrl-j 切换到下方的分割窗口
nnoremap <C-K> <C-W><C-K> " 组合快捷键:- Ctrl-k 切换到上方的分割窗口
nnoremap <C-L> <C-W><C-L> " 组合快捷键:- Ctrl-l 切换到右侧的分割窗口
nnoremap <C-H> <C-W><C-H> " 组合快捷键:- Ctrl-h 切换到左侧的分割窗口
















" -----------------------------------------------
" 标签
" -----------------------------------------------
Plug 'majutsushi/tagbar' " https://github.com/majutsushi/tagbar


nnoremap <F9> :TagbarToggle<CR>
inoremap <F9> <C-O>:TagbarToggle<CR>


let g:tagbar_type_typescript = {
\ 'ctagsbin' : 'tstags',
\ 'ctagsargs' : '-f-',
\ 'kinds': [
\ 'e:enums:0:1',
\ 'f:function:0:1',
\ 't:typealias:0:1',
\ 'M:Module:0:1',
\ 'I:import:0:1',
\ 'i:interface:0:1',
\ 'C:class:0:1',
\ 'm:method:0:1',
\ 'p:property:0:1',
\ 'v:variable:0:1',
\ 'c:const:0:1',
\ ],
\ 'sort' : 0
\ }












" -----------------------------------------------
" 自动补全
" -----------------------------------------------
Plug 'Valloric/YouCompleteMe' " https://github.com/ycm-core/YouCompleteMe
Plug 'Raimondi/delimitMate' " https://github.com/Raimondi/delimitMate


nnoremap <Leader>fi :YcmCompleter FixIt<CR>
nnoremap <Leader>gd :YcmCompleter GoToDefinition<CR>












" -----------------------------------------------
" 语法高亮,检查
" -----------------------------------------------
Plug 'sheerun/vim-polyglot' " https://github.com/sheerun/vim-polyglot
Plug 'w0rp/ale' " https://github.com/w0rp/ale


let g:ale_fix_on_save = 1
let g:ale_sign_column_always = 1
let g:ale_sign_error = '●'
let g:ale_sign_warning = '▶'


nmap <silent> <C-k> <Plug>(ale_previous_wrap)
nmap <silent> <C-j> <Plug>(ale_next_wrap)










" -----------------------------------------------
" 全局搜索,快速打开文件
" -----------------------------------------------
Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } " https://github.com/junegunn/fzf
Plug 'junegunn/fzf.vim' " https://github.com/junegunn/fzf.vim
Plug 'ctrlpvim/ctrlp.vim' " https://github.com/ctrlpvim/ctrlp.vim


let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files -co --exclude-standard']
let g:ctrlp_regexp = 1


" <c-r>: 切换匹配模式
" <c-t>:在新的 tab 中打开
" :Rg












" -----------------------------------------------
" 状态条
" -----------------------------------------------
Plug 'vim-airline/vim-airline' " https://github.com/vim-airline/vim-airline
Plug 'vim-airline/vim-airline-themes' " https://github.com/vim-airline/vim-airline-themes


let g:airline_theme='molokai'
let g:airline_powerline_fonts = 1


let g:airline#extensions#tabline#enabled = 1
let g:airline#extensions#tabline#formatter = 'unique_tail'
let g:airline#extensions#ale#enabled = 1
let g:airline#extensions#tabline#buffer_nr_show = 1
let g:airline#extensions#nerdtree_statusline = 0
let g:airline_section_c = ''












" -----------------------------------------------
" 注释
" -----------------------------------------------
Plug 'scrooloose/nerdcommenter' " https://github.com/preservim/nerdcommenter


let g:NERDSpaceDelims = 1
let g:NERDDefaultAlign = 'left'


" <leader>c<space> 注释/取消注释
" <leader>ca 切换 // 和 /* */
" <leader>cs /* 块注释 */
" <leader>cm 只用一组符号注释
" <leader>cA 在行尾添加注释

" <leader> 默认为 \
" 在vim的普通模式下使用“\cc”, 可以轻松注释掉光标所在的行;
" 在visual模式下,使用这个组合键“\cc”, 可以轻松注释掉选择的代码块。

" <Esc> 是ESC的意思, 先到行首输入/*,然后ESC,到行尾输入*/, j向下移动一行
" /* 注释该行 */
map = I/*<space><Esc> A */<Esc>j
map == I#<space><Esc>

"数字 0 的意思是回到当前行的行首, 而 $ 是回到行尾 , x 是删除一个字符, 所以 xxx 就是删除三个字符
" /* 消除该行注释 */
map - 0xxx$xxxj
map -- I<Esc>xx<Esc>











" -----------------------------------------------
" git
" -----------------------------------------------
Plug 'airblade/vim-gitgutter' " https://github.com/airblade/vim-gitgutter
Plug 'tpope/vim-fugitive' " https://github.com/tpope/vim-fugitive
Plug 'tpope/vim-rhubarb' " https://github.com/tpope/vim-rhubarb


set updatetime=100
let g:gitgutter_max_signs = -1


" jump to next hunk: ]c
" jump to previous hunk: [c
" stage the hunk: <Leader>hs
" undo the hunk: <Leader>hu
" preview the hunk: <Leader>hp


" :G
" :Gvdiffsplit
" :GBrowse
"
" s: 加到暂存区中
" u: 重置加入暂存区的修改
" X: 丢弃修改
" ca: 更改上一次提交
" ce: 使用上一次提交
" =: 切换 diff 显示
" cc: 提交当前暂存区中的文件












" -----------------------------------------------
" Markdown
" -----------------------------------------------
Plug 'iamcco/markdown-preview.nvim', { 'do': 'cd app && yarn install' } " https://github.com/iamcco/markdown-preview.nvim


" :MarkdownPreview
" :MarkdownPreviewStop












" -----------------------------------------------
" Emmet
" -----------------------------------------------
Plug 'mattn/emmet-vim' " https://github.com/mattn/emmet-vim


let g:user_emmet_leader_key='<C-Z>'


" <C-Z>,












" -----------------------------------------------
" Prettier
" -----------------------------------------------
Plug 'prettier/vim-prettier', { 'do': 'npm install' } " https://github.com/prettier/vim-prettier


autocmd BufWritePre *.js,*.jsx,*.mjs,*.ts,*.tsx,*.css,*.less,*.scss,*.json,*.graphql,*.md,*.vue,*.yaml,*.html PrettierAsync


" :PrettierAsync












" -----------------------------------------------
" Wakatime
" -----------------------------------------------
Plug 'wakatime/vim-wakatime' " https://github.com/wakatime/vim-wakatime












" -----------------------------------------------
" Whitespace
" -----------------------------------------------
Plug 'ntpeters/vim-better-whitespace' " https://github.com/ntpeters/vim-better-whitespace


let g:better_whitespace_enabled=1


" :StripWhitespace





" -----------------------------------------------
" 新文件标题
" -----------------------------------------------

" 侦查文件类型
filetype on
" 载入文件类型插件
filetype plugin on
" 为特定文件类型载入相关缩进文件
filetype indent on
"新建.c,.h,.sh,.java文件,自动插入文件头

autocmd BufNewFile *.cpp,*.[ch],*.sh,*.java exec ":call SetTitle()"

""定义函数SetTitle,自动插入文件头

func SetTitle()

"如果文件类型为.sh文件

if expand("%:e") == 'sh'

call setline(1,"\#########################################################################")

call append(line("."), "\# File Name: ".expand("%"))

call append(line(".")+1, "\# Author: DANTE FUNG")

call append(line(".")+2, "\# mail: fhlin0611@foxmail.com")

call append(line(".")+3, "\# Created Time: ".strftime("%c"))

call append(line(".")+4, "\#########################################################################")

call append(line(".")+5, "\#!/bin/bash")

call append(line(".")+6, "")

else

call setline(1, "/*************************************************************************")

call append(line("."), " > File Name: ".expand("%"))

call append(line(".")+1, " > Author: DANTE FUNG")

call append(line(".")+2, " > Mail: fhlin0611@foxmail.com")

call append(line(".")+3, " > Created Time: ".strftime("%c"))

call append(line(".")+4, " ************************************************************************/")

call append(line(".")+5, "")

endif

if expand("%:e") == 'cpp'

call append(line(".")+6, "#include<iostream>")

call append(line(".")+7, "using namespace std;")

call append(line(".")+8, "")

endif

if expand("%:e") == 'c'

call append(line(".")+6, "#include<stdio.h>")

call append(line(".")+7, "")

endif

"新建文件后,自动定位到文件末尾

autocmd BufNewFile * normal G

endfunc






call plug#end()


" PlugInstall
" PlugUpdate
" PlugClean
" PlugUpgrade
" PlugStatus
" PlugDiff
" PlugSnapshot


mac下配置vim
http://dantefung.github.io/2020/10/28/mac下配置vim/
Beitragsautor
DANTE FUNG
Veröffentlicht am
October 28, 2020
Urheberrechtshinweis