一台配置强大的电脑,一个巨大的显示屏,一个顺手的编辑器,飞快的网速,能够说是高效工做的必备条件.自命一个搞技术的,深知时间的宝贵,效率能够说是一我的的能力评价的评介标准.硬件条件只是钱的问题,而软件的配置则是我的素养问题.
此处本意是打造一个专题,这里单讲编辑器vimphp
vim的重要性没必要费话.网上有几个不错的vim配置方案,特别在github上,做者已经简化到只出几个命令的地步,有kvim,wklken, easwy等,但这些有很大的针对性,不可照搬不误,由于好多插件和配置,若是不明就里,反而会拔苗助长.这就要求对配置和插件作到耳熟能详,只在身体力行,运用才能游刃有余.html
此博文长期更新,以备不时之需,亦可备份待查java
先上一个最基本的配置代码python
"========================================== " Author: vintion " Version: 1.0 " Email: niwenxianq@qq.com " BlogPost: http://cnblog/vintion " Last_modify: 2014-11-24 " ==================================================== " 修改leader键 let mapleader = ',' let g:mapleader = ',' " 开启语法高亮 syntax on "========================================== " General Settings 基础设置 "========================================== "set guifont=Monaco:h20 " 字体 && 字号 " history存储容量 set history=2000 "检测文件类型 filetype on "set tags ":set tags=tags "针对不一样的文件类型采用不一样的缩进格式 filetype indent on "容许插件 filetype plugin on "启动自动补全 filetype plugin indent on set autoread " 文件修改以后自动载入。 set shortmess=atI " 启动的时候不显示那个援助索马里儿童的提示 " 备份,到另外一个位置. 防止误删, 目前是取消备份 "set backup "set backupext=.bak "set backupdir=/tmp/vimbk/ " 取消备份。 视状况本身改 set nobackup " 关闭交换文件 set noswapfile "create undo file if has('persistent_undo') set undolevels=1000 " How many undos set undoreload=10000 " number of lines to save for undo set undofile " So is persistent undo ... set undodir=/tmp/vimundo/ endif set wildignore=*.swp,*.bak,*.pyc,*.class,.svn " 突出显示当前行等 set cursorcolumn set cursorline " 突出显示当前行 "设置 退出vim后,内容显示在终端屏幕, 能够用于查看和复制 "好处:误删什么的,若是之前屏幕打开,能够找回 set t_ti= t_te= " 能够在buffer的任何地方使用鼠标(相似office中在工做区双击鼠标定位) set mouse=a "set mouse-=a " 鼠标暂不启用, 键盘党.... set selection=exclusive set selectmode=mouse,key " 修复ctrl+m 多光标操做选择的bug,可是改变了ctrl+v进行字符选中时将包含光标下的字符 "set selection=exclusive set selection=inclusive set selectmode=mouse,key " No annoying sound on errors " 去掉输入错误的提示声音 set title " change the terminal's title "不要闪烁 set novisualbell " don't beep set noerrorbells " don't beep set t_vb= set tm=500 " Remember info about open buffers on close" set viminfo^=% " For regular expressions turn magic on set magic " Configure backspace so it acts as it should act set backspace=eol,start,indent set whichwrap+=<,>,h,l "========================================== " Display Settings 展现/排版等界面格式设置 "========================================== " "显示当前的行号列号: set ruler set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%) " 命令行(在状态行下)的高度,默认为1 set cmdheight=1 ""在状态栏显示正在输入的命令 set showcmd " 左下角显示当前vim模式 set showmode " 在上下移动光标时,光标的上方或下方至少会保留显示的行数 set scrolloff=7 " 状态行颜色 highlight StatusLine guifg=SlateBlue guibg=Yellow highlight StatusLineNC guifg=Gray guibg=White " set winwidth=79 " 命令行(在状态行下)的高度,默认为1,这里是2 "set statusline=%<%f\ %h%m%r%=%k[%{(&fenc==\"\")?&enc:&fenc}%{(&bomb?\",BOM\":\"\")}]\ %-14.(%l,%c%V%)\ %P " Always show the status line - use 2 lines for the status bar set laststatus=2 set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "显示行号: set number " 取消换行。 set nowrap " 括号配对状况,跳转并高亮一下匹配的括号 set showmatch " How many tenths of a second to blink when matching brackets set matchtime=2 "设置文内智能搜索提示 " 高亮search命中的文本。 set hlsearch " 打开增量搜索模式,随着键入即时搜索,逐字高亮 set incsearch " 搜索时忽略大小写 set ignorecase " 有一个或以上大写字母时仍大小写敏感 set smartcase " ignore case if search pattern is all lowercase, case-sensitive otherwise " 代码折叠 set foldenable " 折叠方法 " manual 手工折叠 " indent 使用缩进表示折叠 " expr 使用表达式定义折叠 " syntax 使用语法定义折叠 " diff 对没有更改的文本进行折叠 " marker 使用标记进行折叠, 默认标记是 {{{ 和 }}} set foldmethod=indent set foldlevel=99 " 缩进配置 set smartindent " Smart indent set cindent "C样式缩进 set autoindent " 打开自动缩进,继承前一行的缩进 " never add copyindent, case error " copy the previous indentation on autoindenting " tab相关变动 set tabstop=4 " 设置Tab键的宽度 [等同的空格个数] set shiftwidth=4 " 每一次缩进对应的空格数 set softtabstop=4 " 按退格键时能够一次删掉 4 个空格 set smarttab " insert tabs on the start of a line according to shiftwidth, not tabstop 按退格键时能够一次删掉 4 个空格 set expandtab " 将Tab自动转化成空格 [须要输入真正的Tab键时,使用 Ctrl+V + Tab] set shiftround " 缩进时,取整 use multiple of shiftwidth when indenting with '<' and '>' set wrap "换行,nowrap是不换行 " A buffer becomes hidden when it is abandoned set hidden set wildmode=list:longest set ttyfast " 00x增减数字时使用十进制 set nrformats= " 相对行号 行号变成相对,能够用 nj nk 进行跳转 5j 5k 上下跳5行 set relativenumber number au FocusLost * :set norelativenumber number au FocusGained * :set relativenumber " 插入模式下用绝对行号, 普通模式下用相对 autocmd InsertEnter * :set norelativenumber number autocmd InsertLeave * :set relativenumber function! NumberToggle() if(&relativenumber == 1) set norelativenumber number else set relativenumber endif endfunc nnoremap <C-n> :call NumberToggle()<cr> "========================================== " FileEncode Settings 文件编码,格式 "========================================== " 设置新文件的编码为 UTF-8 set encoding=utf-8 " 自动判断编码时,依次尝试如下编码: set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1 set helplang=cn "set langmenu=zh_CN.UTF-8 "set enc=2byte-gb18030 " 下面这句只影响普通模式 (非图形界面) 下的 Vim。 set termencoding=utf-8 " Use Unix as the standard file type set ffs=unix,dos,mac " 如遇Unicode值大于255的文本,没必要等到空格再折行。 "自动格式化 "set formatoptions+=m set formatoptions=tcrqn " 合并两行中文时,不在中间加空格: set formatoptions+=B "========================================== " others 其它设置 "========================================== autocmd! bufwritepost _vimrc source % " vimrc文件修改以后自动加载。 windows。 autocmd! bufwritepost .vimrc source % " vimrc文件修改以后自动加载。 linux。 " 自动补全配置 "让Vim的补全菜单行为与通常IDE一致(参考VimTip1228) set completeopt=longest,menu " 加强模式中的命令行自动完成操做 set wildmenu " Ignore compiled files set wildignore=*.o,*~,*.pyc,*.class "离开插入模式后自动关闭预览窗口 autocmd InsertLeave * if pumvisible() == 0|pclose|endif "回车即选中当前项 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" "上下左右键的行为 会显示其余信息 inoremap <expr> <Down> pumvisible() ? "\<C-n>" : "\<Down>" inoremap <expr> <Up> pumvisible() ? "\<C-p>" : "\<Up>" inoremap <expr> <PageDown> pumvisible() ? "\<PageDown>\<C-p>\<C-n>" : "\<PageDown>" inoremap <expr> <PageUp> pumvisible() ? "\<PageUp>\<C-p>\<C-n>" : "\<PageUp>" " if this not work ,make sure .viminfo is writable for you if has("autocmd") au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif endif "========================================== " HotKey Settings 自定义快捷键设置 "========================================== " 主要按键重定义 " 关闭方向键, 强迫本身用 hjkl map <Left> <Nop> map <Right> <Nop> map <Up> <Nop> map <Down> <Nop> "Treat long lines as break lines (useful when moving around in them) "se swap以后,同物理行上线直接跳 nnoremap k gk nnoremap gk k nnoremap j gj nnoremap gj j " F1 - F6 设置 " F1 废弃这个键,防止调出系统帮助 " F2 行号开关,用于鼠标复制代码用 " F3 显示可打印字符开关 " F4 换行开关 " F5 粘贴模式paste_mode开关,用于有格式的代码粘贴 " F6 语法开关,关闭语法能够加快大文件的展现 " I can type :help on my own, thanks. Protect your fat fingers from the evils of <F1> noremap <F1> <Esc>" ""为方便复制,用<F2>开启/关闭行号显示: function! HideNumber() if(&relativenumber == &number) set relativenumber! number! elseif(&number) set number! else set relativenumber! endif set number? endfunc nnoremap <F2> :call HideNumber()<CR> nnoremap <F3> :set list! list?<CR> nnoremap <F4> :set wrap! wrap?<CR> "set paste set pastetoggle=<F5> " when in insert mode, press <F5> to go to " paste mode, where you can paste mass data " that won't be autoindented " disbale paste mode when leaving insert mode au InsertLeave * set nopaste nnoremap <F6> :exec exists('syntax_on') ? 'syn off' : 'syn on'<CR> "Smart way to move between windows 分屏窗口移动 map <C-j> <C-W>j map <C-k> <C-W>k map <C-h> <C-W>h map <C-l> <C-W>l " Go to home and end using capitalized directions noremap H ^ noremap L $ "Map ; to : and save a million keystrokes " ex mode commands made easy 用于快速进入命令行 nnoremap ; : " 命令行模式加强,ctrl - a到行首, -e 到行尾 cnoremap <C-j> <t_kd> cnoremap <C-k> <t_ku> cnoremap <C-a> <Home> cnoremap <C-e> <End> " 搜索相关 " Map <Space> to / (search) and Ctrl-<Space> to ? (backwards search) map <space> / " 进入搜索Use sane regexes" nnoremap / /\v vnoremap / /\v "Keep search pattern at the center of the screen." nnoremap <silent> n nzz nnoremap <silent> N Nzz nnoremap <silent> * *zz nnoremap <silent> # #zz nnoremap <silent> g* g*zz " switch # * nnoremap # * nnoremap * # " 去掉搜索高亮 "noremap <silent><leader>/ :nohls<CR> set nohlsearch " --------tab/buffer相关 "Use arrow key to change buffer" " TODO: 如何跳转到肯定的buffer? " :b1 :b2 :bf :bl nnoremap [b :bprevious<cr> nnoremap ]b :bnext<cr> noremap <left> :bp<CR> noremap <right> :bn<CR> " tab 操做 " TODO: ctrl + n 变成切换tab的方法 "map <C-2> 2gt map <leader>th :tabfirst<cr> map <leader>tl :tablast<cr> map <leader>tj :tabnext<cr> map <leader>tk :tabprev<cr> map <leader>tn :tabnext<cr> map <leader>tp :tabprev<cr> map <leader>te :tabedit<cr> map <leader>td :tabclose<cr> map <leader>tm :tabm<cr> " 新建tab Ctrl+t nnoremap <C-t> :tabnew<CR> inoremap <C-t> <Esc>:tabnew<CR> " TODO: 配置成功这里, 切换更方便, 两个键 " nnoremap <C-S-tab> :tabprevious<CR> " nnoremap <C-tab> :tabnext<CR> " inoremap <C-S-tab> <Esc>:tabprevious<CR>i " inoremap <C-tab> <Esc>:tabnext<CR>i " nnoremap <C-Left> :tabprevious<CR> " nnoremap <C-Right> :tabnext<CR> " normal模式下切换到确切的tab noremap <leader>1 1gt noremap <leader>2 2gt noremap <leader>3 3gt noremap <leader>4 4gt noremap <leader>5 5gt noremap <leader>6 6gt noremap <leader>7 7gt noremap <leader>8 8gt noremap <leader>9 9gt noremap <leader>0 :tablast<cr> " Toggles between the active and last active tab " " The first tab is always 1 " let g:last_active_tab = 1 nnoremap <leader>gt :execute 'tabnext ' . g:last_active_tab<cr> nnoremap <silent> <c-l> :execute 'tabnext ' . g:last_active_tab<cr> vnoremap <silent> <c-l> :execute 'tabnext ' . g:last_active_tab<cr> autocmd TabLeave * let g:last_active_tab = tabpagenr() " ------- 选中及操做改键 "Reselect visual block after indent/outdent.调整缩进后自动选中,方便再次操做 vnoremap < <gv vnoremap > >gv " y$ -> Y Make Y behave like other capitals map Y y$ " select all map <Leader>sa ggVG" "map <Leader>as gg"+yG " select block nnoremap <leader>v V`} " w!! to sudo & write a file cmap w!! w !sudo tee >/dev/null % " kj 替换 Esc inoremap kj <Esc> " 滚动Speed up scrolling of the viewport slightly nnoremap <C-e> 2<C-e> nnoremap <C-y> 2<C-y> "Jump to start and end of line using the home row keys " 加强tab操做, 致使这个会有问题, 考虑换键 "nmap t o<ESC>k "nmap T O<ESC>j " Quickly close the current window nnoremap <leader>q :q<CR> " Swap implementations of ` and ' jump to markers " By default, ' jumps to the marked line, ` jumps to the marked line and " column, so swap them nnoremap ' ` nnoremap ` ' " remap U to <C-r> for easier redo nnoremap U <C-r> " Quickly edit/reload the vimrc file nmap <silent> <leader>ev :e $MYVIMRC<CR> nmap <silent> <leader>sv :so $MYVIMRC<CR> "========================================== " FileType Settings 文件类型设置 "========================================== " Python 文件的通常设置,好比不要 tab 等 autocmd FileType python set tabstop=4 shiftwidth=4 expandtab ai " 保存python文件时删除多余空格 fun! <SID>StripTrailingWhitespaces() let l = line(".") let c = col(".") %s/\s\+$//e call cursor(l, c) endfun autocmd FileType c,cpp,java,php,ruby,python autocmd BufWritePre <buffer> :call <SID>StripTrailingWhitespaces() " 定义函数AutoSetFileHead,自动插入文件头 autocmd BufNewFile *.sh,*.py exec ":call AutoSetFileHead()" function! AutoSetFileHead() "若是文件类型为.sh文件 if &filetype == 'sh' call setline(1, "\#!/bin/bash") endif "若是文件类型为python if &filetype == 'python' call setline(1, "\#!/usr/bin/env python") call append(1, "\# encoding: utf-8") endif normal G normal o normal o endfunc " F10 to run python script nnoremap <buffer> <F10> :exec '!python' shellescape(@%, 1)<cr> "F5: C/C++的编译和运行 map <F5> :call CompileRunGpp()<CR> func! CompileRunGpp() exec "w" exec "!g++ % -o %<" exec "! ./%<" endfunc "========================================== " Theme Settings 主题设置 "========================================== " Set extra options when running in GUI mode if has("gui_running") set guifont=Monaco:h14 if has("gui_gtk2") "GTK2 set guifont=Monaco\ 12, Monospace\ 12 endif set guioptions-=T set guioptions+=e set guioptions-=r set guioptions-=L set guitablabel=%M\ %t set showtabline=1 set linespace=2 set noimd set t_Co=256 endif " theme主题 set background=dark "colorscheme solarized set t_Co=256 "colorscheme molokai "colorscheme desert "设置标记一列的背景颜色和数字一行颜色一致 hi! link SignColumn LineNr hi! link ShowMarksHLl DiffAdd hi! link ShowMarksHLu DiffChange "" for error highlight,防止错误整行标红致使看不清 highlight clear SpellBad highlight SpellBad term=standout ctermfg=1 term=underline cterm=underline highlight clear SpellCap highlight SpellCap term=underline cterm=underline highlight clear SpellRare highlight SpellRare term=underline cterm=underline highlight clear SpellLocal highlight SpellLocal term=underline cterm=underline """""""""""""""""""""""""""""" " Tag list (ctags) """""""""""""""""""""""""""""" nmap <silent> <F9> <ESC>:Tlist<RETURN> nmap tl :Tlist<cr> let Tlist_Show_One_File = 1 "不一样时显示多个文件的tag,只显示当前文件的 let Tlist_File_Fold_Auto_Close = 1 let Tlist_Exit_OnlyWindow = 1 "若是taglist窗口是最后一个窗口,则退出vim let Tlist_Use_Right_Window = 1 "在右侧窗口中显示taglist窗口 " minibufexpl插件的通常设置 let g:miniBufExplMapWindowNavVim = 1 let g:miniBufExplMapWindowNavArrows = 1 let g:miniBufExplMapCTabSwitchBufs = 1 let g:miniBufExplModSelTarget = 1 "******************************************************** " NERD_Tree 配置 * "******************************************************** "显示加强 let NERDChristmasTree=1 "自动调整焦点 let NERDTreeAutoCenter=1 "鼠标模式:目录单击,文件双击 let NERDTreeMouseMode=2 "打开文件后自动关闭 let NERDTreeQuitOnOpen=1 "显示文件 let NERDTreeShowFiles=1 "显示隐藏文件 let NERDTreeShowHidden=1 "高亮显示当前文件或目录 let NERDTreeHightCursorline=1 "显示行号 let NERDTreeShowLineNumbers=1 "窗口位置 let NERDTreeWinPos='left' "窗口宽度 let NERDTreeWinSize=31 "不显示'Bookmarks' label 'Press ? for help' let NERDTreeMinimalUI=1 nnoremap <silent> <F4> :NERDTreeToggle<CR> "快捷键 "nnoremap <silent> <F4> :NERDTreeToggle<CR> ""map <F4> :silent! NERDTreeToggle<CR> ""let NERDTreeWinPos="right" "窗口在右侧 "当打开NERDTree时,自动显示bookmark ""let NERDTreeShowBookmarks=1 "winManagerWinodw let g:winManagerWindowLayout='FileExplorer|TagList' nmap wm :WMToggle<cr> "括号补全 :inoremap ( ()<ESC>i :inoremap ) <c-r>=ClosePair(')')<CR> inoremap { {<CR>}<ESC>O inoremap } <c-r>=ClosePair('}')<CR> :inoremap [ []<ESC>i :inoremap ] <c-r>=ClosePair(']')<CR> :inoremap " ""<ESC>i :inoremap ' ''<ESC>i function! ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\<Right>" else return a:char endif endfunction "********************************************************* " vundle 配置 * "********************************************************* set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() " let Vundle manage Vundle, required Plugin 'gmarik/Vundle.vim' " My Plugins is here Plugin 'tpope/vim-fugitive' Plugin 'L9' Plugin 'a.vim' Plugin 'Auto-Pairs' Plugin 'vim-scripts/taglist.vim' Plugin 'The-NERD-tree' Plugin 'Syntastic' Plugin 'FuzzyFinder' Plugin 'Lokaltog/vim-powerline' Plugin 'Valloric/YouCompleteMe' call vundle#end() "启动智能补全 filetype plugin indent on "***************************************************** " taglist配置 * "***************************************************** "不显示"press F1 to display help" let Tlist_Compact_Format=1 "窗口在右侧显示 let Tlist_Use_Right_Window=1 "只显示当前文件的tags let Tlist_Show_One_File=1 "高亮显示 let Tlist_Auto_Highlight_tag=1 "随文件自动更新 let Tlist_Auto_Update=1 "设置宽度 let Tlist_WinWidth=30 "taglist窗口是最后一个窗口,则退出vim let Tlist_Exit_OnlyWindow=1 "单击跳转 let Tlist_Use_SingClick=1 "打开关闭快捷键 nnoremap <silent> <F8> :TlistToggle<CR> "***************************************************** " YouCompleteMe配置 * "***************************************************** "leader映射为逗号“,” let mapleader = "," "配置默认的ycm_extra_conf.py let g:ycm_global_ycm_extra_conf = '~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py' "按,jd 会跳转到定义 nnoremap <leader>jd :YcmCompleter GoToDefinitionElseDeclaration<CR> "打开vim时再也不询问是否加载ycm_extra_conf.py配置 let g:ycm_confirm_extra_conf=0 "使用ctags生成的tags文件 let g:ycm_collect_identifiers_from_tag_files = 1 "***************************************************** " Syntastic配置 * "***************************************************** let g:Syntastic_check_on_open=1
更新...linux