.vimrc
· 7.5 KiB · VimL
Исходник
if empty(glob('~/.vim/autoload/plug.vim'))
silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs
\ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin('~/.vim/plugged')
Plug 'tpope/vim-vinegar'
Plug 'tpope/vim-surround'
Plug 'tpope/vim-commentary'
Plug 'junegunn/fzf'
Plug 'junegunn/fzf.vim'
Plug 'prabirshrestha/vim-lsp'
call plug#end()
syntax enable
filetype on
filetype plugin on
filetype indent on
set ruler
set encoding=utf-8 " utf8 by default for new files
set nocompatible " it's not 1985
set nobackup " don't create ~backup files
set noswapfile " don't create .swp file
set number " show line numbers
set nowrap " disable wrapping
set cursorline " highlight current line
set ttyfast " improve scrolling speed
set lazyredraw " improve draw speed
set foldlevelstart=99 " unfold everything by default
set noerrorbells " disable bell/flash
set history=1000 " command history length
set so=10 " horizontal scrollover
set backspace=2 " make backspace work normally
set nopaste " normal behavior for paste (don't try to indent)
set tabpagemax=15 " max 15 tabs open
set laststatus=2 " always display statusbar
set previewheight=3 " maximum height for preview window
set showmatch " highlight matching brace
set updatetime=750 " improve latency for plugins
set showcmd " show commands as they're being input
set autoread " automatically reload when changed externally
set hlsearch " highlight all search matches
set incsearch " start searching before hitting 'enter'
set ignorecase " perform case-insensitive search
set smartcase " ...unless search term has a capital letter
set hidden " hide buffers instead of closing them
set wildmenu " autocomplete for command menu
set modelines=1 " obey file modelines
set timeoutlen=1000 " no key delays
set ttimeoutlen=0 " no key delays
set completeopt=menu,menuone,longest,preview
set smartindent " autoindent
set expandtab " replace hard tabs with spaces
set shiftwidth=2 " tab width = 2 spaces
set tabstop=2
set softtabstop=2
"set textwidth=80 " default max line length
set colorcolumn=81 " display a marker 1 column after the text width
" whitespace visibility
set list listchars=tab:>-,nbsp:~,trail:X
" Mappings {{{1
" Leader {{{2
let mapleader = ","
let g:mapleader = ","
" Fast saving {{{2
nmap <leader>w :w!<cr>
" Visual mode pressing * or # searches for the current selection
" Super useful! From an idea by Michael Naumann
vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR>
vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR>
" Search {{{2
map <space> /
map <c-space> ?
" Disable highlight when <leader><cr> is pressed
map <silent> <leader><cr> :noh<cr>
" Windows {{{2
noremap <leader>h <C-w>s
noremap <leader>v <C-w>v
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l
" Buffers {{{2
noremap <leader>bq :q<cr>
map <leader>bd :Bclose<cr>
map <leader>ba :bufdo bd<cr>
map <leader>bo :only<cr>
" Tabs {{{2
map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
noremap <S-l> gt
noremap <S-h> gT
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove
map <leader>t<leader> :tabnext
let g:lasttab = 1
nmap <Leader>tl :exe "tabn ".g:lasttab<CR>
au TabLeave * let g:lasttab = tabpagenr()
map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/
" Switch CWD to the directory of the open buffer
map <leader>cd :cd %:p:h<cr>:pwd<cr>
" Remap VIM 0 to first non-blank character
noremap 0 ^
noremap ^ 0
" Pressing ,ss will toggle and untoggle spell checking
map <leader>ss :setlocal spell!<cr>
" Shortcuts using <leader>
map <leader>sn ]s
map <leader>sp [s
map <leader>sa zg
map <leader>s? z=
" Netrw {{{2
let g:netrw_banner = 0
" Plugin Config {{{1
" FZF {{{2
nmap <leader>fb :Buffers<cr>
nmap <leader>ff :Files<cr>
nnoremap <leader>fg :Rg<space>
let $FZF_DEFAULT_COMMAND = 'rg --files'
" LSP {{{2
" Go {{{3
if executable('gopls')
au User lsp_setup call lsp#register_server({
\ 'name': 'gopls',
\ 'cmd': {server_info->['gopls']},
\ 'initialization_options': {
\ 'completeUnimported': v:true,
\ 'matcher': 'fuzzy',
\ 'ui.inlayhint.hints': {
\ 'assignVariableTypes': v:true,
\ 'compositeLiteralFields': v:true,
\ 'compositeLiteralTypes': v:true,
\ 'constantValues': v:true,
\ 'functionTypeParameters': v:true,
\ 'parameterNames': v:true,
\ 'rangeVariableTypes': v:true,
\ },
\ 'codelenses': {
\ 'generate': v:true,
\ 'test': v:true,
\ 'run_vulncheck_exp': v:true,
\ },
\ },
\ 'capabilities': {
\ 'textDocument': {
\ 'documentSymbol': {
\ 'hierarchicalDocumentSymbolSupport': v:true,
\ },
\ },
\ },
\ 'allowlist': ['go', 'gomod'],
\ })
endif
" Python {{{3
if executable('pylsp')
" pip install python-lsp-server
au User lsp_setup call lsp#register_server({
\ 'name': 'pylsp',
\ 'cmd': {server_info->['pylsp']},
\ 'allowlist': ['python'],
\ })
endif
" Javascript/Typescript {{{3
if executable('typescript-language-server')
" npm --global install python-lsp-server
au User lsp_setup call lsp#register_server({
\ 'name': 'typescript-language-server',
\ 'cmd': {server_info->['typescript-language-server', '--stdio']},
\ 'initialization_options': {
\ 'preferences': {
\ 'includeInlayParameterNameHintsWhenArgumentMatchesName': v:true,
\ 'includeInlayParameterNameHints': 'all',
\ 'includeInlayVariableTypeHints': v:true,
\ 'includeInlayPropertyDeclarationTypeHints': v:true,
\ 'includeInlayFunctionParameterTypeHints': v:true,
\ 'includeInlayEnumMemberValueHints': v:true,
\ 'includeInlayFunctionLikeReturnTypeHints': v:true
\ },
\ },
\ 'allowlist': ['javascript', 'javascriptreact', 'typescript', 'typescriptreact'],
\ })
endif
" Buffer setup {{{3
function! s:on_lsp_buffer_enabled() abort
setlocal omnifunc=lsp#complete
setlocal signcolumn=yes
if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif
nmap <buffer> gd <plug>(lsp-definition)
nmap <buffer> gs <plug>(lsp-document-symbol-search)
nmap <buffer> gS <plug>(lsp-workspace-symbol-search)
nmap <buffer> gr <plug>(lsp-references)
nmap <buffer> gi <plug>(lsp-implementation)
nmap <buffer> gt <plug>(lsp-type-definition)
nmap <buffer> <leader>rn <plug>(lsp-rename)
nmap <buffer> [g <plug>(lsp-previous-diagnostic)
nmap <buffer> ]g <plug>(lsp-next-diagnostic)
nmap <buffer> K <plug>(lsp-hover)
nnoremap <buffer> <expr><c-f> lsp#scroll(+4)
nnoremap <buffer> <expr><c-d> lsp#scroll(-4)
let g:lsp_format_sync_timeout = 1000
autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync')
" refer to doc to add more commands
endfunction
augroup lsp_install
au!
" call s:on_lsp_buffer_enabled only for languages that has the server registered.
autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled()
augroup END
" END {{{1
colorscheme slate
set notermguicolors
hi Normal guibg=NONE ctermbg=NONE
hi LineNr guibg=NONE ctermbg=NONE
" vim:fdm=marker:fdl=1
1 | if empty(glob('~/.vim/autoload/plug.vim')) |
2 | silent !curl -fLo ~/.vim/autoload/plug.vim --create-dirs |
3 | \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim |
4 | autocmd VimEnter * PlugInstall --sync | source $MYVIMRC |
5 | endif |
6 | |
7 | call plug#begin('~/.vim/plugged') |
8 | Plug 'tpope/vim-vinegar' |
9 | Plug 'tpope/vim-surround' |
10 | Plug 'tpope/vim-commentary' |
11 | Plug 'junegunn/fzf' |
12 | Plug 'junegunn/fzf.vim' |
13 | Plug 'prabirshrestha/vim-lsp' |
14 | call plug#end() |
15 | |
16 | syntax enable |
17 | filetype on |
18 | filetype plugin on |
19 | filetype indent on |
20 | |
21 | set ruler |
22 | set encoding=utf-8 " utf8 by default for new files |
23 | set nocompatible " it's not 1985 |
24 | set nobackup " don't create ~backup files |
25 | set noswapfile " don't create .swp file |
26 | set number " show line numbers |
27 | set nowrap " disable wrapping |
28 | set cursorline " highlight current line |
29 | set ttyfast " improve scrolling speed |
30 | set lazyredraw " improve draw speed |
31 | set foldlevelstart=99 " unfold everything by default |
32 | set noerrorbells " disable bell/flash |
33 | set history=1000 " command history length |
34 | set so=10 " horizontal scrollover |
35 | set backspace=2 " make backspace work normally |
36 | set nopaste " normal behavior for paste (don't try to indent) |
37 | set tabpagemax=15 " max 15 tabs open |
38 | set laststatus=2 " always display statusbar |
39 | set previewheight=3 " maximum height for preview window |
40 | set showmatch " highlight matching brace |
41 | set updatetime=750 " improve latency for plugins |
42 | set showcmd " show commands as they're being input |
43 | set autoread " automatically reload when changed externally |
44 | set hlsearch " highlight all search matches |
45 | set incsearch " start searching before hitting 'enter' |
46 | set ignorecase " perform case-insensitive search |
47 | set smartcase " ...unless search term has a capital letter |
48 | set hidden " hide buffers instead of closing them |
49 | set wildmenu " autocomplete for command menu |
50 | set modelines=1 " obey file modelines |
51 | set timeoutlen=1000 " no key delays |
52 | set ttimeoutlen=0 " no key delays |
53 | set completeopt=menu,menuone,longest,preview |
54 | |
55 | set smartindent " autoindent |
56 | set expandtab " replace hard tabs with spaces |
57 | set shiftwidth=2 " tab width = 2 spaces |
58 | set tabstop=2 |
59 | set softtabstop=2 |
60 | "set textwidth=80 " default max line length |
61 | set colorcolumn=81 " display a marker 1 column after the text width |
62 | " whitespace visibility |
63 | set list listchars=tab:>-,nbsp:~,trail:X |
64 | |
65 | " Mappings {{{1 |
66 | " Leader {{{2 |
67 | let mapleader = "," |
68 | let g:mapleader = "," |
69 | |
70 | " Fast saving {{{2 |
71 | nmap <leader>w :w!<cr> |
72 | |
73 | " Visual mode pressing * or # searches for the current selection |
74 | " Super useful! From an idea by Michael Naumann |
75 | vnoremap <silent> * :<C-u>call VisualSelection('', '')<CR>/<C-R>=@/<CR><CR> |
76 | vnoremap <silent> # :<C-u>call VisualSelection('', '')<CR>?<C-R>=@/<CR><CR> |
77 | |
78 | " Search {{{2 |
79 | map <space> / |
80 | map <c-space> ? |
81 | |
82 | " Disable highlight when <leader><cr> is pressed |
83 | map <silent> <leader><cr> :noh<cr> |
84 | |
85 | " Windows {{{2 |
86 | noremap <leader>h <C-w>s |
87 | noremap <leader>v <C-w>v |
88 | map <C-j> <C-W>j |
89 | map <C-k> <C-W>k |
90 | map <C-h> <C-W>h |
91 | map <C-l> <C-W>l |
92 | |
93 | " Buffers {{{2 |
94 | noremap <leader>bq :q<cr> |
95 | map <leader>bd :Bclose<cr> |
96 | map <leader>ba :bufdo bd<cr> |
97 | map <leader>bo :only<cr> |
98 | |
99 | " Tabs {{{2 |
100 | map <leader>tn :tabnew<cr> |
101 | map <leader>to :tabonly<cr> |
102 | noremap <S-l> gt |
103 | noremap <S-h> gT |
104 | map <leader>tc :tabclose<cr> |
105 | map <leader>tm :tabmove |
106 | map <leader>t<leader> :tabnext |
107 | let g:lasttab = 1 |
108 | nmap <Leader>tl :exe "tabn ".g:lasttab<CR> |
109 | au TabLeave * let g:lasttab = tabpagenr() |
110 | map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/ |
111 | |
112 | " Switch CWD to the directory of the open buffer |
113 | map <leader>cd :cd %:p:h<cr>:pwd<cr> |
114 | |
115 | " Remap VIM 0 to first non-blank character |
116 | noremap 0 ^ |
117 | noremap ^ 0 |
118 | |
119 | |
120 | " Pressing ,ss will toggle and untoggle spell checking |
121 | map <leader>ss :setlocal spell!<cr> |
122 | |
123 | " Shortcuts using <leader> |
124 | map <leader>sn ]s |
125 | map <leader>sp [s |
126 | map <leader>sa zg |
127 | map <leader>s? z= |
128 | |
129 | |
130 | " Netrw {{{2 |
131 | let g:netrw_banner = 0 |
132 | |
133 | " Plugin Config {{{1 |
134 | " FZF {{{2 |
135 | nmap <leader>fb :Buffers<cr> |
136 | nmap <leader>ff :Files<cr> |
137 | nnoremap <leader>fg :Rg<space> |
138 | let $FZF_DEFAULT_COMMAND = 'rg --files' |
139 | |
140 | " LSP {{{2 |
141 | |
142 | " Go {{{3 |
143 | if executable('gopls') |
144 | au User lsp_setup call lsp#register_server({ |
145 | \ 'name': 'gopls', |
146 | \ 'cmd': {server_info->['gopls']}, |
147 | \ 'initialization_options': { |
148 | \ 'completeUnimported': v:true, |
149 | \ 'matcher': 'fuzzy', |
150 | \ 'ui.inlayhint.hints': { |
151 | \ 'assignVariableTypes': v:true, |
152 | \ 'compositeLiteralFields': v:true, |
153 | \ 'compositeLiteralTypes': v:true, |
154 | \ 'constantValues': v:true, |
155 | \ 'functionTypeParameters': v:true, |
156 | \ 'parameterNames': v:true, |
157 | \ 'rangeVariableTypes': v:true, |
158 | \ }, |
159 | \ 'codelenses': { |
160 | \ 'generate': v:true, |
161 | \ 'test': v:true, |
162 | \ 'run_vulncheck_exp': v:true, |
163 | \ }, |
164 | \ }, |
165 | \ 'capabilities': { |
166 | \ 'textDocument': { |
167 | \ 'documentSymbol': { |
168 | \ 'hierarchicalDocumentSymbolSupport': v:true, |
169 | \ }, |
170 | \ }, |
171 | \ }, |
172 | \ 'allowlist': ['go', 'gomod'], |
173 | \ }) |
174 | endif |
175 | |
176 | " Python {{{3 |
177 | if executable('pylsp') |
178 | " pip install python-lsp-server |
179 | au User lsp_setup call lsp#register_server({ |
180 | \ 'name': 'pylsp', |
181 | \ 'cmd': {server_info->['pylsp']}, |
182 | \ 'allowlist': ['python'], |
183 | \ }) |
184 | endif |
185 | |
186 | " Javascript/Typescript {{{3 |
187 | if executable('typescript-language-server') |
188 | " npm --global install python-lsp-server |
189 | au User lsp_setup call lsp#register_server({ |
190 | \ 'name': 'typescript-language-server', |
191 | \ 'cmd': {server_info->['typescript-language-server', '--stdio']}, |
192 | \ 'initialization_options': { |
193 | \ 'preferences': { |
194 | \ 'includeInlayParameterNameHintsWhenArgumentMatchesName': v:true, |
195 | \ 'includeInlayParameterNameHints': 'all', |
196 | \ 'includeInlayVariableTypeHints': v:true, |
197 | \ 'includeInlayPropertyDeclarationTypeHints': v:true, |
198 | \ 'includeInlayFunctionParameterTypeHints': v:true, |
199 | \ 'includeInlayEnumMemberValueHints': v:true, |
200 | \ 'includeInlayFunctionLikeReturnTypeHints': v:true |
201 | \ }, |
202 | \ }, |
203 | \ 'allowlist': ['javascript', 'javascriptreact', 'typescript', 'typescriptreact'], |
204 | \ }) |
205 | endif |
206 | |
207 | " Buffer setup {{{3 |
208 | function! s:on_lsp_buffer_enabled() abort |
209 | setlocal omnifunc=lsp#complete |
210 | setlocal signcolumn=yes |
211 | if exists('+tagfunc') | setlocal tagfunc=lsp#tagfunc | endif |
212 | nmap <buffer> gd <plug>(lsp-definition) |
213 | nmap <buffer> gs <plug>(lsp-document-symbol-search) |
214 | nmap <buffer> gS <plug>(lsp-workspace-symbol-search) |
215 | nmap <buffer> gr <plug>(lsp-references) |
216 | nmap <buffer> gi <plug>(lsp-implementation) |
217 | nmap <buffer> gt <plug>(lsp-type-definition) |
218 | nmap <buffer> <leader>rn <plug>(lsp-rename) |
219 | nmap <buffer> [g <plug>(lsp-previous-diagnostic) |
220 | nmap <buffer> ]g <plug>(lsp-next-diagnostic) |
221 | nmap <buffer> K <plug>(lsp-hover) |
222 | nnoremap <buffer> <expr><c-f> lsp#scroll(+4) |
223 | nnoremap <buffer> <expr><c-d> lsp#scroll(-4) |
224 | |
225 | let g:lsp_format_sync_timeout = 1000 |
226 | autocmd! BufWritePre *.rs,*.go call execute('LspDocumentFormatSync') |
227 | |
228 | " refer to doc to add more commands |
229 | endfunction |
230 | |
231 | augroup lsp_install |
232 | au! |
233 | " call s:on_lsp_buffer_enabled only for languages that has the server registered. |
234 | autocmd User lsp_buffer_enabled call s:on_lsp_buffer_enabled() |
235 | augroup END |
236 | |
237 | " END {{{1 |
238 | |
239 | colorscheme slate |
240 | set notermguicolors |
241 | hi Normal guibg=NONE ctermbg=NONE |
242 | hi LineNr guibg=NONE ctermbg=NONE |
243 | |
244 | " vim:fdm=marker:fdl=1 |
245 |