From bfbd3b4f8722aa54d031459b2792d116c4f50ad6 Mon Sep 17 00:00:00 2001 From: We-unite Date: Tue, 24 Dec 2024 20:02:23 +0800 Subject: Fix some important bugs - For all files, `gg=G`is changed to make the cursor position fixed after the file gets formatted. - For files in git repo, the old way to show branch is totally wrong, because the space of `git branch` is deleted. - Show EOL and wrap char in vim - Other things --- vimrc | 2 +- vimrcs/codecmd.vim | 21 +++++++------- vimrcs/myset.vim | 24 ++++++++-------- vimrcs/plugs.vim | 78 ++++++++++++++++++--------------------------------- vimrcs/statusline.vim | 2 +- 5 files changed, 52 insertions(+), 75 deletions(-) diff --git a/vimrc b/vimrc index 6ab2204..f6fc5d3 100644 --- a/vimrc +++ b/vimrc @@ -4,7 +4,7 @@ let vimrcs = { \ "myset": "自行设置", \ "statusline": "状态栏与标签页设置", \ "codecmd": "代码设置", - \ "keys": "自己设的快捷键", + \ "keys": "自己设的快捷键", \ "plugs": "Vundle插件管理及插件内容", \ } diff --git a/vimrcs/codecmd.vim b/vimrcs/codecmd.vim index 4add725..179e68e 100644 --- a/vimrcs/codecmd.vim +++ b/vimrcs/codecmd.vim @@ -21,16 +21,16 @@ autocmd FileType xml set omnifunc=xmlcomplete#CompleteTags autocmd FileType php set omnifunc=phpcomplete#CompletePHP autocmd FileType c set omnifunc=ccomplete#Complete -" 要求格式化之后的代码不要移动光标,并且不要删除换行符和空行,保留原来的视图 -autocmd BufReadPost,BufWritePre *.html,*.vim,*.sh,*.py normal! g1G=G`"z -" 在保存时自动使用clang-format格式化代码 -augroup FormatAutocmd - autocmd! - autocmd BufWritePre *.c,*.cpp,*.h :let save_cursor = getpos(".") - autocmd BufWritePre *.c,*.cpp,*.h :normal! ggVG - autocmd BufWritePre *.c,*.cpp,*.h :ClangFormat - autocmd BufWritePost *.c,*.cpp,*.h :call setpos('.', save_cursor) -augroup END +" 修改gg=G的作用 +nnoremap gg=G :call PreserveCursorAndFormat() +function! PreserveCursorAndFormat() + let l:save_pos = getpos(".") + let l:save_view = winsaveview() + normal! gg=G + call setpos('.', l:save_pos) + call winrestview(l:save_view) +endfunction + command! -nargs=0 ClangFormat :call ClangFormat() autocmd FileType c,h,cpp,hpp,cc nnoremap gg=G :ClangFormat @@ -98,6 +98,5 @@ func SetTitle() call append(line(".")+9, "") endif endif - " 光标移动到文件末尾 normal G endfunc diff --git a/vimrcs/myset.vim b/vimrcs/myset.vim index b977223..4dab14c 100644 --- a/vimrcs/myset.vim +++ b/vimrcs/myset.vim @@ -3,20 +3,20 @@ set encoding=utf-8 set fileencoding=utf-8 set fileencodings=ucs-bom,utf-8,GB18030,cp936,big5,euc-jp,euc-kr,latin1 set fileformat=unix -set helplang=cn " 帮助中文支持 -set mouse=a " 设置鼠标 -set noeb " 去掉输入错误的提示声音 -set confirm " 在处理未保存或只读文件的时候,弹出确认 -set langmenu=zh_CN.UTF-8 " 设置菜单语言 -set scrolloff=3 " 光标移动到buffer的顶部和底部时保持3行距离 -set vb t_vb= " 关闭错误提示声音 +set helplang=cn " 帮助中文支持 +set mouse=a " 设置鼠标 +set noeb " 去掉输入错误的提示声音 +set confirm " 在处理未保存或只读文件的时候,弹出确认 +set langmenu=zh_CN.UTF-8 " 设置菜单语言 +set scrolloff=3 " 光标移动到buffer的顶部和底部时保持3行距离 +set vb t_vb= " 关闭错误提示声音 -colorscheme industry " 设置配色方案 +colorscheme industry " 设置配色方案 syntax on -set rnu " 设置相对行号 -set nu " 设置绝对行号 -set list " 显示tab和空格 -set listchars=tab:>-,trail:- " 设置tab和空格的显示方式 +set rnu " 设置相对行号 +set nu " 设置绝对行号 +set list " 显示tab和空格 +set listchars=tab:>-,trail:-,eol:$,extends:>, " 设置tab和空格的显示方式 set cul set cuc autocmd VimEnter * hi CursorLine cterm=NONE ctermbg=red ctermfg=NONE guibg=darkblue guifg=NONE diff --git a/vimrcs/plugs.vim b/vimrcs/plugs.vim index 8ef3e2a..fee1b2e 100644 --- a/vimrcs/plugs.vim +++ b/vimrcs/plugs.vim @@ -47,10 +47,8 @@ let g:ycm_semantic_triggers = { \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'], \ 'cs,lua,javascript': ['re!\w{2}'], \ } -" hi PMenu ctermfg=34 ctermbg=21 guifg=darkred guibg=darkblue -" hi PMenuSel ctermfg=21 ctermbg=34 guifg=darkblue guibg=darkred -hi PMenu ctermfg=darkgrey ctermbg=21 guifg=darkred guibg=darkblue -hi PMenuSel ctermfg=yellow ctermbg=34 guifg=darkblue guibg=darkred +hi PMenu ctermbg=white ctermfg=NONE guibg=white guifg=NONE +hi PMenuSel ctermbg=brown ctermfg=NONE guibg=brown guifg=NONE nnoremap gdec :YcmCompleter GoToDeclaration nnoremap gdef :YcmCompleter GoToDefinition nnoremap gd :YcmCompleter GoToDefinitionElseDeclaration @@ -95,7 +93,6 @@ let g:NERDTreeGitStatusUntrackedFilesMode = 'all' " a heavy feature too. default let g:translator_target_lang = 'zh' let g:translator_source_lang = 'auto' let g:translator_default_engines = ['youdao', 'bing', 'google', 'haici'] -" let g:translator_default_engines = ['bing'] let g:translator_history_enable = v:true let g:translator_window_type = 'popup' " 可选值为 'popup' 和 'preview',默认为 'popup' " Echo translation in the cmdline @@ -105,60 +102,41 @@ vmap t TranslateV nmap w TranslateW vmap w TranslateWV " Close the translation window -" nmap cl TranslateC -" Replace the text with translation -" nmap r TranslateR -" vmap r TranslateRV -" Translate the text in clipboard -" nmap x TranslateX +nmap wc TranslateC " vim-indent-guides let g:indent_guides_enable_on_vim_startup = 1 " 启动时自动开启缩进线 let g:indent_guides_guide_size = 1 " 缩进线宽度 let g:indent_guides_start_level = 2 " 从第二级开始显示缩进线 -let g:indent_guides_auto_colors = 0 " 自动颜色 -autocmd VimEnter * highlight IndentGuidesOdd ctermbg=gray " 缩进线颜色 -autocmd VimEnter * highlight IndentGuidesEven ctermbg=darkgrey " 缩进线颜色 +let g:indent_guides_auto_colors = 1 " 自动颜色 +let g:indent_guides_tab_guides = 0 +" autocmd VimEnter * highlight IndentGuidesOdd ctermbg=gray " 缩进线颜色 +" autocmd VimEnter * highlight IndentGuidesEven ctermbg=darkgrey " 缩进线颜色 " nerdcommenter -let g:NERDSpaceDelims = 1 " 在注释符号前后加空格 -" let g:NERDCompactSexyComs = 1 " 紧凑的注释格式 - -" vim-terminal-help -" set termwinsize=10*106 -" let g:terminal_key = '' -" 设置光标在终端与编辑器间切换的快捷键 +let g:NERDSpaceDelims = 1 " 在注释符号前后加空格 +let g:NERDCompactSexyComs = 1 " 紧凑的注释格式 " 进行Taglist的设置 -" map tl Tlist " -" let Tlist_Ctags_Cmd='/usr/local/bin/ctags' " 因为我们放在环境变量里,所以可以直接执行 -" let Tlist_Use_Right_Window=1 " 让窗口显示在右边,0的话就是显示在左边 -" let Tlist_Show_One_File=1 " 让taglist可以同时展示多个文件的函数列表 -" let Tlist_File_Fold_Auto_Close=0 " 非当前文件列表折叠隐藏 -" let Tlist_Exit_OnlyWindow=1 " 当taglist是最后一个分割窗口时,自动推出vim -" let Tlist_Process_File_Always=1 " 是否一直处理tags.1:处理;0:不处理 -" let Tlist_Inc_Winwidth=1 " 不是一直实时更新tags,因为没有必要 -" " 每隔多少秒更新一次tags,如果为0则不更新 -" let Tlist_Update_Time=5 -" " 在每个标签页打开相同的函数列表 -" autocmd BufWinEnter * if getcmdwintype() == '' | silent TlistUpdate | endif -" " 打开新标签页时自动打开函数列表 -" autocmd BufWinEnter * if (winnr("$") == 1 && exists("b:NERDTree") -" \ && b:NERDTree.IsTabTree()) | -" \silent TlistToggle | endif +map tl Tlist " +let Tlist_Ctags_Cmd='/usr/local/bin/ctags' " 因为我们放在环境变量里,所以可以直接执行 +let Tlist_Use_Right_Window=1 " 让窗口显示在右边,0的话就是显示在左边 +let Tlist_Show_One_File=1 " 让taglist可以同时展示多个文件的函数列表 +let Tlist_File_Fold_Auto_Close=0 " 非当前文件列表折叠隐藏 +let Tlist_Exit_OnlyWindow=1 " 当taglist是最后一个分割窗口时,自动推出vim +let Tlist_Process_File_Always=1 " 是否一直处理tags.1:处理;0:不处理 +let Tlist_Inc_Winwidth=1 " 不是一直实时更新tags,因为没有必要 +" 每隔多少秒更新一次tags,如果为0则不更新 +let Tlist_Update_Time=5 +" 在每个标签页打开相同的函数列表 +autocmd BufWinEnter * if getcmdwintype() == '' | silent TlistUpdate | endif +" 打开新标签页时自动打开函数列表 +autocmd BufWinEnter * if (winnr("$") == 1 && exists("b:NERDTree") + \ && b:NERDTree.IsTabTree()) | + \silent TlistToggle | endif " syntastic " YouCompleteMe插件对该插件支持过于优秀,一般不再需要配置,故废弃 -" let g:syntastic_python_checkers=['pylint'] -" let g:syntastic_python_pylint_args=['--disable=C0111,R0903,C0301'] -" let g:syntastic_asm_checkers=['as86'] " GNU as汇编语言语法检查,需要安装as86和ld86 - -" powerline -" let laststatus=2 -" let g:airlinr_powerline_fonts=1 " 使用官方打过补丁的字体 -" let g:Powerline_symbols='fancy' - -" " everforest -" autocmd VimEnter * colorscheme everforest " 设置颜色主题 -" let g:everforest_background = 'soft' -" let g:everforest_enable_italic = 1 +let g:syntastic_python_checkers=['pylint'] +let g:syntastic_python_pylint_args=['--disable=C0111,R0903,C0301'] +let g:syntastic_asm_checkers=['as86'] " GNU as汇编语言语法检查,需要安装as86和ld86 diff --git a/vimrcs/statusline.vim b/vimrcs/statusline.vim index 9216343..8105a31 100644 --- a/vimrcs/statusline.vim +++ b/vimrcs/statusline.vim @@ -68,7 +68,7 @@ function! ShowGit() " 查看当前所在分支 let s:branch = system(l:git . " branch --no-color 2>/dev/null | sed -e '/^[^*]/d' -e 's/* \\(.*\\)/\\1/' | tr -d '\n' | tr -d ' '") " 字符串匹配,匹配不到"HEAD detached at"或者”头指针在xxx分离“则返回branch - if match(s:branch, 'HEAD detached at') == -1 && match(s:branch, '分离') == -1 + if match(s:branch, 'HEADdetachedat') == -1 && match(s:branch, '分离') == -1 return strlen(s:branch) ? 'b: '.s:branch.'> ' : '' endif " 查看当前是否在tag上,如果是则返回tag名 -- cgit v1.2.3-70-g09d2