VIM 配置
基础配置
vimrc配置
source ~/.vim/config/basic
source ~/.vim/config/plugin
source ~/.vim/config/vim-lsp
source ~/.vim/config/bash-lsp
source ~/.vim/config/go-lsp
basic配置
" ~/.vim/config/basic
set laststatus=2
set statusline=%1*\%<%.50F
set statusline+=%=%2*\%y%m%r%h%w\ %*
set statusline+=%3*\%{&ff}\[%{&fenc}]\ %*
set statusline+=%4*\ row:%l/%L,column:%c\ %*
set statusline+=%5*\%3p%%\%*
hi User1 cterm=none ctermfg=30 ctermbg=none
hi User2 cterm=none ctermfg=208 ctermbg=none
hi User3 cterm=none ctermfg=169 ctermbg=none
hi User4 cterm=none ctermfg=102 ctermbg=none
hi User5 cterm=none ctermfg=green ctermbg=none"
syntax on
set backspace=2
set wrap
set number
set relativenumber
set nocompatible
set nobackup
set noswapfile
set splitbelow
set splitright
set showcmd
set wildmenu
set hlsearch
set incsearch
" map <LEADER> :retab!<CR>
set smartcase
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set autoindent
autocmd InsertLeave,WinEnter * set cursorline
autocmd InsertEnter,WinLeave * set nocursorline
highlight CursorLine cterm=none ctermbg=none ctermfg=180 guibg=NONE guifg=NONE
autocmd BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
autocmd FileType yaml setlocal ts=2 sts=2 sw=2 expandtab"
插件配置
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
配置插件管理器
" ~/.vim/config/plugin
call plug#begin('~/.vim/plugged')
Plug 'fatih/vim-go'
Plug 'Yggdroot/indentLine'
Plug 'prabirshrestha/vim-lsp'
Plug 'prabirshrestha/asyncomplete.vim'
Plug 'prabirshrestha/asyncomplete-lsp.vim'
call plug#end()
配置 vim-lsp
" ~/.vim/config/vim-lsp
" Tab completion
function! CleverTab()
if strpart(getline('.'), 0, col('.')-1) =~ '^\s*$'
return "\<Tab>"
else
return "\<C-N>"
endif
endfunction
inoremap <Tab> <C-R>=CleverTab()<CR>
配置 bash-lsp
npm i -g bash-language-server
bash-lsp 配置
" ~/.vim/config/bash-lsp
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']},
\ 'allowlist': ['sh', 'bash'],
\ })
endif
autocmd BufNewFile *.sh exec ":call SetTitle()"
func SetTitle()
if expand("%:e") == 'sh'
call append(0,"\#!/usr/bin/env bash")
call append(1,"\# author: liy")
call append(2,"\#")
call append(3,"export PS4='\\[\\e[35m\\]+ $(basename $0):${FUNCNAME}:$LINENO: \\[\\e[0m\\]'")
call append(4,"")
endif
endfunc"
autocmd BufWrite *.sh call SetLastModifiedTimes()
function SetLastModifiedTimes()
let pos = getpos('.')
let line = getline(6)
let newtime = "# updated: ".strftime("%Y-%m-%d %H:%M:%S")
let repl = substitute(line,".*$",newtime,"g")
let res = search("# updated","w")
if res
call setline(6,repl)
endif
call setpos(".",pos)
endfunction
" ~/.vim/config/go-lsp
let g:go_def_mode='gopls'
set completeopt=menu,menuone,noselect
"au BufEnter *.go call go#config#_init()
au FileType go command! -buffer GoImports :silent !goimports % | edit
au FileType go command! -buffer GoFmt :silent !gofmt -w %
au FileType go nmap <Leader>r :call go#name#Run() <CR>
au User lsp_setup call lsp#register_server({
\ 'name': 'gopls',
\ 'cmd': {server_info->['gopls']},
\ 'whitelist': ['go'],
\ })