標籤:blog color 使用 width 檔案 os
學習python時想要在gvim中配置python的編譯環境,網上找到一個比較好用的vimrc配置,儲存下來以備下次有需要。
set encoding=utf-8set termencoding=utf-8set fileencodings=utf-8,chinese,latin-1if has("win32") set fileencoding=chineseelse set fileencoding=utf-8endiflanguage messages zh_CN.utf-8" 設定不與以前版本兼set nocompatible" 設定色彩配置colorscheme murphy" 顯示行號set nu" 偵測檔案類型filetype on" 設定當檔案被改動時自動載入set autoread" 記錄曆史的行數set history=100" 顯示文法高亮syntax enablesyntax on" 在處理未儲存或唯讀檔案的時候,彈出確認set confirm" 與windows共用剪貼簿set clipboard+=unnamed" 載入檔案類型外掛程式filetype plugin on" 為特定檔案類型載入相關縮排檔案filetype indent on" 儲存全域變數set viminfo+=!" 帶有如下符號的單詞不要被換行分割set iskeyword+=_,$,@,%,#,-" 設定滑鼠一直可用set mouse=a" 高亮當前行set cursorline" 命令列高度set cmdheight=1" 啟動的時候不顯示那個援助索馬里兒童的提示set shortmess=atI" 不讓vim發出討厭的滴滴聲set noerrorbells" 在被分割的視窗間顯示空白,便於閱讀set fillchars=vert:\ ,stl:\ ,stlnc:""""""""""""""""""""""""""""" 檔案設定""""""""""""""""""""""""""""" 不要備份檔案(覆蓋檔案時不備份)set nobackup" 不要產生swap檔案,當buffer被丟棄的時候隱藏它setlocal noswapfileset bufhidden=hide" 字元間插入的像素行數目set linespace=0" 增強模式中的命令列自動完成操作set wildmenu" 置粘貼模式,使得粘貼不錯位" set paste" 儲存檔案,用習慣了Ctrl+S了" nmap <C-s> <esc>:w<CR>" imap <C-s> <esc>:w<CR>noremap <C-S> :update<CR>vnoremap <C-S> <C-C>:update<CR>inoremap <C-S> <C-O>:update<CR>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 搜尋和匹配"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 高亮顯示匹配的括弧set showmatch" 高亮顯示被找到的句子(phrases)"set hlsearch" 在搜尋時,輸入的詞句的逐字元高亮(類似firefox的搜尋),即輸入搜尋內容時就顯示搜尋結果set incsearch" 搜尋時忽略大小寫set ignorecase" 不要閃爍set novisualbell"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 文字格式設定和排版"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 自動格式化set formatoptions=tcrqn" 繼承前一行的縮排方式,特別適用於多行注釋set autoindent" 為C程式提供自動縮排set smartindent" 使用C樣式的縮排set cindent" 定位字元為4set tabstop=4" 統一縮排為4" 使得按退格鍵時可以一次刪掉 4 個空格set softtabstop=4" 設定 << 和 >> 命令移動時的寬度為 4set shiftwidth=4" 不要用空格代替定位字元set noexpandtab" 設定每行120個字元自動換行set textwidth=120 " 自動切換目前的目錄為當前檔案所在的目錄set autochdir" 摺疊代碼set foldmethod=syntax" 檔案開啟時不摺疊set foldlevel=100 """"""""""""""""""""""""""""""""""""""""""""自動執行個體括弧"""""""""""""""""""""""""""""""""""""""""""inoremap ( ()<ESC>iinoremap ) <c-r>=ClosePair(‘)‘)<CR>inoremap { {}<ESC>iinoremap } <c-r>=ClosePair(‘}‘)<CR>inoremap [ []<ESC>iinoremap ] <c-r>=ClosePair(‘]‘)<CR>inoremap ‘ ‘‘<ESC>iinoremap " ""<ESC>ifunction ClosePair(char) if getline(‘.‘)[col(‘.‘) - 1] == a:char return "\<Right>" else return a:char endifendf"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set mapleader"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""let mapleader = ","" platformfunction! MySys() if has("win32") return "windows" else return "linux" endifendfunction" if file not opened, create a new tab, or switch to the opened filefunction! SwitchToBuf(filename) " find in current tab let bufwinnr = bufwinnr(a:filename) if bufwinnr != -1 exec bufwinnr . "wincmd w" return else " search each tab tabfirst let tb = 1 while tb <= tabpagenr("$") let bufwinnr = bufwinnr(a:filename) if bufwinnr != -1 exec "normal " . tb . "gt" exec bufwinnr . "wincmd w" return endif tabnext let tb = tb +1 endwhile " not exist, new tab exec "tabnew " . a:filename endifendfunction" fast edit .vimrcif MySys() == ‘linux‘ " fast reloading of the .vimrc map <silent> <leader>ss :source ~/.vimrc<cr> " fast editing of the .vimrc map <silent> <leader>ee :call SwitchToBuf("~/.vimrc")<cr> " when .vimrc is edited, reload it autocmd! bufwritepost .vimrc source ~/.vimrcelseif MySys() == ‘windows‘ " Set helplang set helplang=cn "Fast reloading of the _vimrc map <silent> <leader>ss :source ~/_vimrc<cr> "Fast editing of _vimrc map <silent> <leader>ee :call SwitchToBuf("~/_vimrc")<cr> "When _vimrc is edited, reload it autocmd! bufwritepost _vimrc source ~/_vimrcendifif MySys() == ‘windows‘ source $VIMRUNTIME/mswin.vim behave mswinendif""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 外掛程式""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""加入工程使得能夠訪問ctags"""""""""""""""""""""""""""""""project1"set tags=tagsset autochdir"後面的工程加在tags變數上""""""""""""""""""""""""""""""" 設定Taglist""""""""""""""""""""""""""""""" 按照名稱排序let Tlist_Sort_Type = "name"" 在右側顯示視窗let Tlist_Use_left_Window = 1" 如果只有一個buffer,kill視窗也kill掉bufferlet Tlist_Exist_OnlyWindow = 1" 使taglist只顯示當前檔案tag,其它檔案的tag都被摺疊起來(同時顯示多個檔案中的tag時)let Tlist_File_Fold_Auto_Close = 1" 不要顯示摺疊樹let Tlist_Enable_Fold_Column = 1"不同時顯示多個檔案的tag,只顯示當前檔案的let Tlist_Show_One_File = 1 " 鍵盤對應nmap tl :TlistToggle<cr>""""""""""""""""""""""""""""""""""""""""""""""設定 winManager winManager管理netrw和Taglist。"""""""""""""""""""""""""""""""""""""""""""""let g:winManagerWindowLayout = "FileExplorer|TagList"let g:persistentBehaviour = 0let g:winManagerWidth = 30let g:defaultExplorer = 0nmap <C-W><C-F> :FirstExplorerWindow<cr>nmap <C-W><C-B> :BottomExplorerWindow<cr>"nmap <silent> <F8> :WMToggle<cr>nmap wm :WMToggle<cr>"設定 netrw"""""""""""""""""""""""""""""""let g:netrw_winsize = 30"nmap <silent> <leader>fe :Sexplore!<cr>"let Tlist_File_Fold_Auto_Close=1" 快速切換標頭檔/源檔案"nnoremap <silent><F12>:A<cr>""nmap <silent><F12>:A<CR>"在工程中快速尋找"nnoremap <silent><F3>:Grep<cr>"""""""""""""""""""""""""""""""設定 MiniBufExploer""""""""""""""""""""""""""""""" quickfix模式autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""F5編譯和運行C++程式"F6編譯和運行C程式""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" C的編譯和運行map <F6> :call CompileRunGcc()<CR>func! CompileRunGcc()exec "w"exec "!gcc % -o %<"exec "! ./%<"endfunc" C++的編譯和運行map <F5> :call CompileRunGpp()<CR>func! CompileRunGpp()exec "w"exec "!g++ % -o %<"exec "! ./%<"endfunc source $VIMRUNTIME/vimrc_example.vimsource $VIMRUNTIME/mswin.vimbehave mswinset diffexpr=MyDiff()function MyDiff() let opt = ‘-a --binary ‘ if &diffopt =~ ‘icase‘ | let opt = opt . ‘-i ‘ | endif if &diffopt =~ ‘iwhite‘ | let opt = opt . ‘-b ‘ | endif let arg1 = v:fname_in if arg1 =~ ‘ ‘ | let arg1 = ‘"‘ . arg1 . ‘"‘ | endif let arg2 = v:fname_new if arg2 =~ ‘ ‘ | let arg2 = ‘"‘ . arg2 . ‘"‘ | endif let arg3 = v:fname_out if arg3 =~ ‘ ‘ | let arg3 = ‘"‘ . arg3 . ‘"‘ | endif let eq = ‘‘ if $VIMRUNTIME =~ ‘ ‘ if &sh =~ ‘\<cmd‘ let cmd = ‘""‘ . $VIMRUNTIME . ‘\diff"‘ let eq = ‘"‘ else let cmd = substitute($VIMRUNTIME, ‘ ‘, ‘" ‘, ‘‘) . ‘\diff"‘ endif else let cmd = $VIMRUNTIME . ‘\diff‘ endif silent execute ‘!‘ . cmd . ‘ ‘ . opt . arg1 . ‘ ‘ . arg2 . ‘ > ‘ . arg3 . eqendfunction" 自動補全(ctrl-p)時的一些選項: 多於一項時顯示菜單,最長選擇; 顯示當前選擇的額外資訊if v:version >= 700 set completeopt=menu,longest,preview endif"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 狀態行相關動作"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 顯示狀態列 (預設值為 1, 無法顯示狀態列)set laststatus=2" 狀態行顏色highlight StatusLine guifg=SlateBlue guibg=Yellowhighlight StatusLineNC guifg=Gray guibg=Whitefunction! CurDir() let curdir = substitute(getcwd(), ‘/Users/amir/‘, "~/", "g")return curdirendfunction""""""""""""""""""""""""""""""""狀態行顯示內容"""""""""""""""""""""""""""""""" %F 當前檔案名稱" %m 當前檔案修改狀態" %r 當前檔案是否唯讀" %Y 當前檔案類型" %{&fileformat} 當前檔案編碼" %b 當前游標處字元的 ASCII 碼值" %B 當前游標處字元的十六進位值" %l 當前游標行號" %c 當前游標列號" %V 當前游標虛擬列號 (根據字元所佔位元組數計算)" %p 當前行佔總行數的百分比" %% 百分比符號" %L 當前檔案總行數 set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}%h\ \ \ Line:\ %l/%L:%c " 設定在狀態行顯示的資訊如下: " set nowrapscan"Highlight currentif has("gui_running") set cursorline hi cursorline guibg=#333333 hi CursorColumn guibg=#333333endif"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => VIM userinterface""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""Set 7 lines to the curors - when moving vertical..set so=7"Do not redraw, when running macros.. lazyredrawset lz"Change buffer - without savingset hid"Set magic onset magic"How many tenths of a second to blinkset mat=2set lines=40set columns=100""""""""""""""""""""""""""""""""""""""""""""""""""""功能表列、工具列顯示與隱藏的切換"""""""""""""""""""""""""""""""""""""""""""""""""""set guioptions-=Tset guioptions-=mmap <silent> <F4> :if &guioptions =~# ‘T‘ <Bar> \set guioptions-=T <Bar> \set guioptions-=m <bar> \else <Bar> \set guioptions+=T <Bar> \set guioptions+=m <Bar> \endif<CR>""""""""""""""""""""""""""""""""""""""""""""""""""""" 日曆外掛程式設定""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:calendar_diary = /calendar" map ca :Calendar<cr>" 讓 gvim 支援 Alt+n 來切換標籤頁function! BufPos_ActivateBuffer(num) let l:count = 1 for i in range(1, bufnr("$")) if buflisted(i) && getbufvar(i, "&modifiable") if l:count == a:num exe "buffer " . i return endif let l:count = l:count + 1 endif endfor echo "No buffer!"endfunctionfunction! BufPos_Initialize() for i in range(1, 9) exe "map <M-" . i . "> :call BufPos_ActivateBuffer(" . i . ")<CR>" endfor exe "map <M-0> :call BufPos_ActivateBuffer(10)<CR>"endfunctionautocmd VimEnter * call BufPos_Initialize()" 按F11鍵讓VIM全屏if has(‘gui_running‘) && has("win32") map <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR>endif" 自動載入_vimrcautocmd! bufwritepost _vimrc source %