nano做一个的文本编辑器,偶尔简单修改一下文本还是挺好用的:https://zsxwz.com/2020/04/26/
vim做为一个文本编辑器,比较强大,可以安装各种插件,各种快捷键。自己不太会记快捷键,因此用的也不多。看了很多配置文档,最后还是自己搞一份算了,当做一个ide简单的python环境,很多时候也是很方便的。
1、.vimrc:
"安装插件 set nocompatible filetype off set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() "插件列表 Plugin 'gmarik/Vundle.vim' Plugin 'Chiel92/vim-autoformat' Plugin 'https://github.com/bling/vim-airline' Plugin 'w0rp/ale' Plugin 'kien/rainbow_parentheses.vim' "Plugin 'scrooloose/syntastic' Plugin 'scrooloose/nerdtree' Plugin 'Yggdroot/indentLine' Plugin 'jiangmiao/auto-pairs' Plugin 'tell-k/vim-autopep8' Plugin 'ctrlpvim/ctrlp.vim' Plugin 'nvie/vim-flake8' Plugin 'preservim/nerdcommenter' call vundle#end() filetype plugin indent on call plug#begin('~/.vim/plugged') Plug 'neoclide/coc.nvim', {'branch': 'release'} Plug 'w0ng/vim-hybrid' Plug 'morhetz/gruvbox' Plug 'iamcco/mathjax-support-for-mkdp' Plug 'iamcco/markdown-preview.vim' call plug#end() " vim-hybrid set background=dark colorscheme hybrid "colorscheme gruvbox "f4注释当前行 map <F4> <leader>ci <CR> "f5运行代码 map <F5> :call CompileRunGcc()<CR> func! CompileRunGcc() exec "w" if &filetype == 'c' exec "!g++ % -o %<" exec "!time ./%<" elseif &filetype == 'cpp' exec "!g++ % -o %<" exec "!time ./%<" elseif &filetype == 'java' exec "!javac %" exec "!time java %<" elseif &filetype == 'sh' :!time bash % elseif &filetype == 'python' exec "!clear" exec "!time python3 %" elseif &filetype == 'html' exec "!firefox % &" elseif &filetype == 'go' " exec "!go build %<" exec "!time go run %" elseif &filetype == 'mkd' exec "!~/.vim/markdown.pl % > %.html &" exec "!firefox %.html &" endif endfunc "缩进指示线" let g:indentLine_char='┆' let g:indentLine_enabled = 1 "ycm配置 highlight PMenu ctermfg=0 ctermbg=242 guifg=black guibg=darkgrey highlight PMenuSel ctermfg=242 ctermbg=8 guifg=darkgrey guibg=black "python配置 let python_highlight_all=1 au Filetype python set tabstop=4 au Filetype python set softtabstop=4 au Filetype python set shiftwidth=4 au Filetype python set textwidth=79 au Filetype python set expandtab au Filetype python set autoindent au Filetype python set fileformat=unix autocmd Filetype python set foldmethod=indent autocmd Filetype python set foldlevel=99 "解除方向键 nnoremap <C-J> <C-W><C-J> nnoremap <C-K> <C-W><C-K> nnoremap <C-L> <C-W><C-L> nnoremap <C-H> <C-W><C-H> "f3文件树 nnoremap <F3> :NERDTreeToggle<CR> "f6代码格式化 nnoremap <F6> :Autoformat<CR> let g:autoformat_autoindent = 0 let g:autoformat_retab = 0 let g:autoformat_remove_trailing_spaces = 0 nmap <silent> <F8> <Plug>MarkdownPreview imap <silent> <F8> <Plug>MarkdownPreview nmap <silent> <F9> <Plug>StopMarkdownPreview imap <silent> <F9> <Plug>StopMarkdownPreview "括号颜色 let g:rbpt_colorpairs = [ \ ['brown', 'RoyalBlue3'], \ ['Darkblue', 'SeaGreen3'], \ ['darkgray', 'DarkOrchid3'], \ ['darkgreen', 'firebrick3'], \ ['darkcyan', 'RoyalBlue3'], \ ['darkred', 'SeaGreen3'], \ ['darkmagenta', 'DarkOrchid3'], \ ['brown', 'firebrick3'], \ ['gray', 'RoyalBlue3'], \ ['darkmagenta', 'DarkOrchid3'], \ ['Darkblue', 'firebrick3'], \ ['darkgreen', 'RoyalBlue3'], \ ['darkcyan', 'SeaGreen3'], \ ['darkred', 'DarkOrchid3'], \ ['red', 'firebrick3'], \ ] let g:rbpt_max = 16 let g:rbpt_loadcmd_toggle = 0 au VimEnter * RainbowParenthesesToggle au Syntax * RainbowParenthesesLoadRound au Syntax * RainbowParenthesesLoadSquare au Syntax * RainbowParenthesesLoadBraces "代码检查 let g:ale_fix_on_save = 1 let g:ale_completion_enabled = 1 let g:ale_sign_column_always = 1 let g:airline#extensions#ale#enabled = 1 "set statusline+=%#warningmsg# "set statusline+=%{SyntasticStatuslineFlag()} "set statusline+=%* "let g:syntastic_always_populate_loc_list = 1 "let g:syntastic_auto_loc_list = 1 "let g:syntastic_check_on_open = 1 "let g:syntastic_check_on_wq = 0 set viminfo='10,\"100,:20,%,n~/.viminfo au BufReadPost * if line("'\"") > 0|if line("'\"") <= line("$")|exe("norm '\"")|else|exe "norm $"|endif|endif "vim配置 syntax on set ic set hlsearch set encoding=utf-8 set fileencodings=utf-8,ucs-bom,GB2312,big5 set termencoding=utf-8 set cursorline set autoindent set smartindent set scrolloff=4 set showmatch set nu set mouse=a filetype indent on set ignorecase "代码折叠 "set foldmethod=indent filetype plugin on "set mouse=v set t_Co=256 set backspace=2 " TextEdit might fail if hidden is not set. set hidden " Some servers have issues with backup files, see #649. set nobackup set nowritebackup " Give more space for displaying messages. set cmdheight=2 " Having longer updatetime (default is 4000 ms = 4 s) leads to noticeable " delays and poor user experience. set updatetime=300 " Don't pass messages to |ins-completion-menu|. set shortmess+=c " Always show the signcolumn, otherwise it would shift the text each time " diagnostics appear/become resolved. if has("patch-8.1.1564") " Recently vim can merge signcolumn and number column into one set signcolumn=number else set signcolumn=yes endif " Use tab for trigger completion with characters ahead and navigate. " NOTE: Use command ':verbose imap <tab>' to make sure tab is not mapped by " other plugin before putting this into your config. inoremap <silent><expr> <TAB> \ pumvisible() ? "\<C-n>" : \ <SID>check_back_space() ? "\<TAB>" : \ coc#refresh() inoremap <expr><S-TAB> pumvisible() ? "\<C-p>" : "\<C-h>" function! s:check_back_space() abort let col = col('.') - 1 return !col || getline('.')[col - 1] =~# '\s' endfunction " Use <c-space> to trigger completion. if has('nvim') inoremap <silent><expr> <c-space> coc#refresh() else inoremap <silent><expr> <c-@> coc#refresh() endif " Use <cr> to confirm completion, `<C-g>u` means break undo chain at current " position. Coc only does snippet and additional edit on confirm. " <cr> could be remapped by other vim plugin, try `:verbose imap <CR>`. if exists('*complete_info') inoremap <expr> <cr> complete_info()["selected"] != "-1" ? "\<C-y>" : "\<C-g>u\<CR>" else inoremap <expr> <cr> pumvisible() ? "\<C-y>" : "\<C-g>u\<CR>" endif " Use `[g` and `]g` to navigate diagnostics " Use `:CocDiagnostics` to get all diagnostics of current buffer in location list. nmap <silent> [g <Plug>(coc-diagnostic-prev) nmap <silent> ]g <Plug>(coc-diagnostic-next) " GoTo code navigation. nmap <silent> gd <Plug>(coc-definition) nmap <silent> gy <Plug>(coc-type-definition) nmap <silent> gi <Plug>(coc-implementation) nmap <silent> gr <Plug>(coc-references) " Use K to show documentation in preview window. nnoremap <silent> K :call <SID>show_documentation()<CR> function! s:show_documentation() if (index(['vim','help'], &filetype) >= 0) execute 'h '.expand('<cword>') else call CocAction('doHover') endif endfunction " Highlight the symbol and its references when holding the cursor. autocmd CursorHold * silent call CocActionAsync('highlight') " Symbol renaming. nmap <leader>rn <Plug>(coc-rename) " Formatting selected code. xmap <leader>f <Plug>(coc-format-selected) nmap <leader>f <Plug>(coc-format-selected) augroup mygroup autocmd! " Setup formatexpr specified filetype(s). autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected') " Update signature help on jump placeholder. autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp') augroup end " Applying codeAction to the selected region. " Example: `<leader>aap` for current paragraph xmap <leader>a <Plug>(coc-codeaction-selected) nmap <leader>a <Plug>(coc-codeaction-selected) " Remap keys for applying codeAction to the current buffer. nmap <leader>ac <Plug>(coc-codeaction) " Apply AutoFix to problem on the current line. nmap <leader>qf <Plug>(coc-fix-current) " Map function and class text objects " NOTE: Requires 'textDocument.documentSymbol' support from the language server. xmap if <Plug>(coc-funcobj-i) omap if <Plug>(coc-funcobj-i) xmap af <Plug>(coc-funcobj-a) omap af <Plug>(coc-funcobj-a) xmap ic <Plug>(coc-classobj-i) omap ic <Plug>(coc-classobj-i) xmap ac <Plug>(coc-classobj-a) omap ac <Plug>(coc-classobj-a) " Use CTRL-S for selections ranges. " Requires 'textDocument/selectionRange' support of LS, ex: coc-tsserver nmap <silent> <C-s> <Plug>(coc-range-select) xmap <silent> <C-s> <Plug>(coc-range-select) " Add `:Format` command to format current buffer. command! -nargs=0 Format :call CocAction('format') " Add `:Fold` command to fold current buffer. command! -nargs=? Fold :call CocAction('fold', <f-args>) " Add `:OR` command for organize imports of the current buffer. command! -nargs=0 OR :call CocAction('runCommand', 'editor.action.organizeImport') " Add (Neo)Vim's native statusline support. " NOTE: Please see `:h coc-status` for integrations with external plugins that " provide custom statusline: lightline.vim, vim-airline. set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')} " Mappings for CoCList " Show all diagnostics. nnoremap <silent><nowait> <space>a :<C-u>CocList diagnostics<cr> " Manage extensions. nnoremap <silent><nowait> <space>e :<C-u>CocList extensions<cr> " Show commands. nnoremap <silent><nowait> <space>c :<C-u>CocList commands<cr> " Find symbol of current document. nnoremap <silent><nowait> <space>o :<C-u>CocList outline<cr> " Search workspace symbols. nnoremap <silent><nowait> <space>s :<C-u>CocList -I symbols<cr> " Do default action for next item. nnoremap <silent><nowait> <space>j :<C-u>CocNext<CR> " Do default action for previous item. nnoremap <silent><nowait> <space>k :<C-u>CocPrev<CR> " Resume latest coc list. nnoremap <silent><nowait> <space>p :<C-u>CocListResume<CR>
使用的是Vundle做为插件管理,如果需要自己添加扩展,就在call vundle#begin()。。。call vundle#end()之间添加插件地址。
按f3 nerdtree文件树:
按f4,nerdcommenter使用#注释当前行。长按\,然后按cu,取消注释。
可以多行注释,按5\cc,向下注释5行。vim自带的在normal模式下:
:5,10 s/^/#/g,用搜索替换的方法注释也是挺好用的。
按f5,运行常见的代码
按f6,Autoformat代码格式化
按ctrl + p,ctrlp.vim模糊搜索
以上快捷键,如果和系统快捷键有冲突,可以根据自己的需求修改。
2、安装扩展,先安装Vundle插件管理:
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
终端打开vim,如果报错,先忽略。在normal模式下,:PluginInstall,即可安装扩展。安装过程可能相当的慢,毕竟国内可能没有速度。
YouCompleteMe代码自动补全可能比较麻烦,如果无法补全,就需要自己编译一下:https://github.com/ycm-core/YouCompleteMe
需要自己先安装一下cmake
cd ~/.vim/bundle git clone https://github.com/ycm-core/YouCompleteMe.git cd ~/.vim/bundle/YouCompleteMe ./install.py --clangd-completer
如果下载编译真的很慢,自己大包了一份,放在根目录$HOME/.vim即可。
下载:http://download.zsxwz.com/file/16220046-455619032
3、pip安装需要的模块:
pip install pylint autopep8 flake8