下边是我的vimrc文件,从什么时候开始使用vim编程的呢?大概也得说是去年这个时候开始的吧。更确切点说是2011年,没错,当年我入门编程的不是java,而是c语言。依稀记得当年培训机构的老师带着安装了虚拟机,虚拟机里边装了一个ubuntu,感觉很屌。不过后来年轻不懂事儿,荒废了几年岁月,所以至今还是一个低级开发😂😂😂
接下来,聊一下我是如何从面向对象转成面向黑窗口开发的程序员的。从作为程序员的第一天,你就会了解到一个工具,它叫cmd(.exe)。当初掌握的两个命令dir,cd D:。后来我了解到了windows第二个牛逼的工具powershell。我险些因为powershell这个工具学习了.net这个玩意儿。我至今依然认为powershell是一个非常好的shell,面向对象,而且帮助文档特别友好。也就是在那个时候开始正经了解vim这个编辑器了吧。我记得choco install spacevim。大概有个这么个操作吧。
接下来,我正式说说这个vim编辑器吧。
- 自定义键位
map ; :
map - $
- 多种模式
这个东西意味着什么呢?就是你的键盘上的按键足够你使用了,不会为想不出来组合键而烦恼。你可以定义自己喜欢的按键在不同的模式下做不同的操作。比如最入门的insert模式下hjkl是文本的四个字符,在normal模式下就成了上下左右键了。是不是很开心。
- 调用终端命令(! ls )
你可能会想这个东西有什么呢?不就是一个ls嘛。那么这个操作到底意味着什么呢?你可以在vim调用所有的terminal的命令,然后在加上快捷键的方式,明白我的意思吗?是不是很开心呢?举个例子,下午写了一个html文件,旁边的同事告诉我使用右键用浏览器打开。我当时就有点小小尴尬😅,接下来我写了一行配置。使用<leader>i 一键打开html文件😂
autocmd FileType html nnoremap <buffer> <leader>i :!/Applications/Firefox.app/Contents/MacOS/firefox-bin %:p<CR>
let mapleader=" "
" terminal
let $TERM='iterm2'
" netrw
let g:netrw_banner=0
let g:netrw_liststyle=3
" python
let g:python3_host_prog = '/usr/local/bin/python3'
let g:python_host_prog = '/usr/bin/python2'
colorscheme desert
set helplang=cn
set list
set encoding=utf-8
set number
set nowrap
set smartcase
set showcmd
set termguicolors
"set verbose=9
autocmd InsertLeave,WinEnter * set cursorline
autocmd InsertEnter,WinLeave * set nocursorline
set complete-=i " disable scanning included files
set complete-=t " disable searching tags
set smarttab
set softtabstop=4
set tabstop=4
set shiftwidth=4
set clipboard+=unnamedplus
set autoindent
set smartindent
set nobackup
set nowritebackup
set noswapfile
set nocompatible
filetype on
filetype plugin on
set path+=**
set wildmenu
set wildignore=*.o,*.obj,*.class,*.bak,*/target/,*/out/,*/.vim/,*/.git/
set statusline=%<%f\ %h%m%r%=%-14.(%l,%c%V%)\ %P
set scrolloff=4
map ; :
map - $
map s <nop>
map <LEADER>n :Explore .<CR>
map <LEADER>f :find
map <LEADER>s :nohlsearch<CR>
map <LEADER>t yaw<ESC>:!pbpaste \| say<CR>
map <LEADER>r :tabedit ~/.config/nvim<CR>:lcd ~/.config/nvim<CR>
map <LEADER>rc :edit ~/.config/nvim/init.vim<CR>
map <LEADER>sc :source ~/.config/nvim/init.vim<CR>
nmap N Nzz
nmap n nzz
nmap <tab> V>
nmap <s-tab> V<
vmap <tab> >gv
vmap <s-tab> <gv
noremap H :vertical resize+10<CR>
noremap J :below resize+10<CR>
noremap <C-j> <PageDown>
noremap K :below resize-10<CR>
noremap <C-k> <PageUp>
noremap L :vertical resize-10<CR>
noremap <LEADER><CR> :CocFix<CR>
noremap <LEADER>c :CocList<CR>
noremap <LEADER>- :tabprevious<CR>
noremap <LEADER>= :tabNext<CR>
noremap <LEADER>[ :bprevious<CR>
noremap <LEADER>] :bNext<CR>
noremap <LEADER>m :call SetMakeprg()<CR>:make %<CR>
noremap <LEADER>q :bdelete % <CR>
noremap cc <C-w>
noremap co :copen 10<CR>
noremap lg <C-w>v<Esc>:terminal lazygit<CR>
noremap fm <C-w>v<Esc>:terminal vifm .<CR>
noremap tt <C-w>v<Esc>:terminal <CR>i
tnoremap <Esc> <C-\><C-n>
nnoremap <buffer> <LEADER>i :!./% <CR>
command! MakeTags :!ctags -R . <CR>
nmap <leader><leader>t <Plug>(coc-translator-p)
vmap <Leader><leader>t <Plug>(coc-translator-pv)
nmap <leader><Leader>e <Plug>(coc-translator-e)
vmap <leader><Leader>e <Plug>(coc-translator-ev)
nmap <leader><Leader>r <Plug>(coc-translator-r)
vmap <leader><Leader>r <Plug>(coc-translator-rv)
if empty(glob('~/.local/share/nvim/site/autoload/plug.vim'))
silent !curl -fLo ~/.local/share/nvim/site/autoload/plug.vim --create-dirs
\https://raw.GitHub.com/junegunn/vim-plug/master/plug.vim
autocmd VimEnter * PlugInstall --sync | source $MYVIMRC
endif
call plug#begin("~/.config/nvim/plugged")
Plug 'Chiel92/vim-autoformat'
Plug 'tpope/vim-surround'
Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}
"Plug 'puremourning/vimspector'
Plug 'SirVer/ultisnips'
Plug 'honza/vim-snippets'
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries' }
Plug 'airblade/vim-gitgutter'
Plug 'terryma/vim-multiple-cursors'
call plug#end()
" 最好是quickfix这个东西可以有索引,然后直接跳转到对应的位置上就好了。
function SetMakeprg()
if &filetype == 'c'
set makeprg=gcc
elseif &filetype =='cpp'
set makeprg=g++
elseif &filetype == 'python'
set makeprg=python3
elseif &filetype == 'vim'
set makeprg=source
elseif &filetype == 'java'
set makeprg=~/Library/Java/JavaVirtualMachines/jdk-14.0.1+7/Contents/Home/bin/java
elseif &filetype == 'scala'
set makeprg=scala
elseif &filetype == 'js'
set makeprg=node
endif
endfunction
" 现在存在一个问题是第三方插件在修改这个path
function SetPath()
if &filetype=='java'
set path=.,**,~/sourceSpace/jdk/src/**
elseif &filetype == 'python'
set path=.,**,~/Library/Python/3.7/lib/python/site-packages/**
endif
endfunction
autocmd FileType scala nnoremap <buffer> <LEADER>i :!scala %<CR>
autocmd FileType c nnoremap <buffer> <LEADER>i :!gcc % && ./a.out && rm ./a.out <CR>
autocmd FileType cpp nnoremap <buffer> <LEADER>i :!g++ % && ./a.out && rm ./a.out <CR>
autocmd FileType python nnoremap <buffer> <LEADER>i :!python3 % <CR>
autocmd FileType sh nnoremap <buffer> <LEADER>i :sh % <CR>
autocmd FileType go nnoremap <buffer> <LEADER>i :!go run % <CR>
autocmd FileType java nnoremap <buffer> <LEADER>i :!/Users/zhangxiaomin/Library/Java/JavaVirtualMachines/jdk-14.0.1+7/Contents/Home/bin/java % <CR>
autocmd FileType rust nnoremap <buffer> <LEADER>i :!cargo run <CR>
autocmd FileType javascript nnoremap <buffer> <LEADER>i :!node % <CR>
autocmd FileType vim,zsh,tmux nnoremap <buffer> <LEADER>i :source % <CR>
"autocmd FileType java set path+=~/sourceSpace/jdk/src/**
"autocmd FileType python set path+=~/Library/Python/3.7/lib/python/site-packages/**
autocmd FileType * call SetPath()
autocmd BufNewFile *.java 0r ~/.config/nvim/template/java.tpl | autocmd! BufNewFile
autocmd BufNewFile *.py 0r ~/.config/nvim/template/python.tpl | autocmd! BufNewFile
autocmd BufNewFile *.go 0r ~/.config/nvim/template/golang.tpl | autocmd! BufNewFile
autocmd BufNewFile *.c 0r ~/.config/nvim/template/c.tpl | autocmd! BufNewFile
autocmd BufNewFile *.cpp 0r ~/.config/nvim/template/cpp.tpl | autocmd! BufNewFile
autocmd BufNewFile *.rs 0r ~/.config/nvim/template/rust.tpl | autocmd! BufNewFile
autocmd BufNewFile *.html 0r ~/.config/nvim/template/html.tpl | autocmd! BufNewFile
autocmd BufNewFile *.js 0r ~/.config/nvim/template/javascript.tpl | autocmd! BufNewFile