摘要:如何優雅的使用一基本配置十年,青春不再轉眼間,已用了十年。對程序員來說,用制表符還是用空格,足以引發一場戰爭。
如何優雅的使用 Vim(一):基本配置 Vim 十年,青春不再
轉眼間,Vim 已用了十年。
從一開始的抵觸、不解,到隨之而來的習慣、喜歡,再到近幾年編輯器層出不窮的盛況下對 Sublime Text 等短暫的嘗試,以及最后即現在的回歸,這是一個復雜的過程。
目前,我對 Vim 仍停留在配置和使用階段,并沒有為它開發過任何插件。希望接下來十年,能為它做一些貢獻。
Vim 是一個難學難上手,即使熟悉了也會讓你痛并快樂著的那種編輯器。要教別人用 Vim,就更是難上加難了。
從 如何評價GitHub準備推出下一代文本編輯器Xray? 一文,可以看到時下不少編輯器的嘗試。軟件行業發展到今天,編輯器遠遠沒有達到一個完美的境界,包括 Vim,這本身就是一件很不可思議的事情。
基礎設置最最基本的一些設置,位于 vimrc 的開頭。
" 首先設置 mapleader,后面鍵盤映射隨時要用 " 基本上所有自定義的快捷鍵都以這個字符打頭,比如映射`,w`為`:w` let mapleader = "," let g:mapleader = "," " 不兼容 Vi,最大限度使用新特性 set nocompatible " 寫入文件時,不做備份 set nobackup set nowritebackup " 不用交換文件 set noswapfile " 保存文件的快捷鍵 nmap配色方案w :w! " 移除 Windows 文件結尾的 `^M` noremap m :%s/ //ge " 重新打開文件時,恢復上一次游標位置 " 通過View可以記住很多設置,比如高亮當前行、折行等等,但是往往比較讓人費解 set viewoptions=cursor " 只記住游標 au BufWinLeave ?* mkview au VimEnter ?* silent loadview " 檢測文件編碼時,優先考慮 UTF-8 set fileencodings=utf-8,ucs-bom,gbk,gb2312,big5,latin1 " 不同平臺,設置不同的行尾符,即 EOL " 注意:在 Mac 平臺,也是 unix 優先;自 OS X 始,行尾符與 Unix 一致, " 都是 ` ` 而不是 ` ` if has("win32") set fileformats=dos,unix,mac else set fileformats=unix,mac,dos endif " 在斷行、合并(join)行時,針對多字節字符(比如中文)的優化處理 set formatoptions+=mM
目前主要使用 morhetz/gruvbox,本文所有截圖都是 gruvbox 的效果。
配色方案可以通過插件安裝,這里先跳過,會有另一篇文章專門介紹插件。
set background=dark syntax enable colorscheme gruvbox au BufEnter * :syntax sync fromstart格式 縮進選項
" 采用 C 風格的縮進,適用于大多數語言 " 細節調整見下面的 `cinoptions` " 你也可以嘗試 smartindent 和 autoindent set cindent " 細節調整,主要為了適應 Google C++ Style " t0: 函數返回類型聲明不縮進 " g0: C++ "public:" 等聲明縮進一個字符 " h1: C++ "public:" 等聲明后面的語句縮進一個字符 " N-s: C++ namespace 里不縮進 " j1: 合理的縮進 Java 或 C++ 的匿名函數,應該也適用于 JS set cinoptions=t0,g1,h1,N-s,j1制表符 vs. 空格
讓制表符智能一些。
set smarttab
對程序員來說,用制表符還是用空格,足以引發一場戰爭。
美劇《硅谷》中,Richard 因為不能接受女友用空格縮進而斷然與之分手。
下面的設置并不優雅,各人需求不一樣,需做相應調整。
" 先設置缺省情況,然后根據不同文件類型再次重新設置 set expandtab | set tabstop=4 | set shiftwidth=4 " Python, CSS, etc. " 對 C/C++ 等,制表符和縮進都是兩個空格 au FileType c,cpp,html,htmldjango,lua,javascript,nsis set expandtab | set tabstop=2 | set shiftwidth=2 " Makefile 必須保留制表符,且習慣上占八個空格 " 不過,這年頭誰還會寫 Makefile? au FileType make set noexpandtab | set tabstop=8 | set shiftwidth=8文本寬度
除了縮進,另一個深具爭議的話題就是 80列 限制。
雖然現在顯示器大了很多,有些語言習慣上仍然遵守這一規則。
通過設置 textwidth,Vim 可以幫我們在輸入時或用gq格式化時自動斷行。
我發現,用 gq 格式化注釋特別方便,超長的注釋會自動重新排版,以保證不越過指定的長度。
目前,我僅對 C/C++/Python/Vim 做這種限制。
au FileType c,cpp,python,vim set textwidth=80
一般如果設定了寬度限制,最好能畫一條豎線以警示。
設置 colorcolumn 即可。甚至可以設置為多列,比如 "81,101"。
我是所有文件類型都顯示這么一條線。
set colorcolumn=81折行
通常代碼不需折行,前面有些語言設置了寬度限制就更不需要了。
實際操作下來,純文本、Markdown、XML 等比較需要折行,因為它們常常一行太長了。
au FileType text,markdown,html,xml set wrap " 折行時,以單詞為界,以免切斷單詞 set linebreak " 折行后的后續行,使用與第一行相同的縮進 set breakindent用戶界面
" 即使在終端,也盡量啟用鼠標 if has("mouse") | set mouse=a | endif " 顯示輸入中的命令,對 gqq/gcc 這種多個字符的命令特別有用 set showcmd " 下面幾個不解釋,自行查看幫助 set scrolloff=7 set wildmenu set wildmode="list:longest" set ruler " 命令行高度為兩行 set cmdheight=2 " 永遠顯示行號 " 另有比較酷的相對行號(`relativenumber`),雖然我用不習慣 set number set lazyredraw " 切換緩存時不用保存 set hidden " 輸入模式下,退格鍵可以退一切字符 set backspace=eol,start,indent set whichwrap+=<,>,h,l
高亮不想要的空格,比如行尾。
" See [http://vim.wikia.com/wiki/Highlight_unwanted_spaces] " - highlight trailing whitespace in red " - have this highlighting not appear whilst you are typing in insert mode " - have the highlighting of whitespace apply when you open new buffers highlight ExtraWhitespace ctermbg=red guibg=red match ExtraWhitespace /s+$/ autocmd BufWinEnter * match ExtraWhitespace /s+$/ autocmd InsertEnter * match ExtraWhitespace /s+\%#@高亮當前行。
set cursorline不過,我一般不用,因為閃爍的游標就已經很清楚了。
搜索首先,搜索時忽略大小寫(ignorecase)。但是,如果搜索模式里有大寫字母,就不再忽略大小寫(smartcase)。
set ignorecase set smartcase即時顯示匹配結果(incsearch),并高亮所有結果(hlsearch)。
set incsearch set hlsearch map:nohlsearch 替換時,缺省啟用g標志,即,同一行里的所有匹配都會被替換。
set gdefault切換窗口切換窗口的鍵盤映射:
mapj map k map h map l 以及,直接用方向鍵切換緩存的鍵盤映射:
map縮寫(Abbreviation):bn map :bp map :bf map :bl 當前日期、時間、文件名這些內容,用縮寫來輸入是再方便不過了。
當然,縮寫本身的名字不能太常見,下面這些都以 x 打頭,一般不會出現在正常的文本中。iabbrev xname刪除行尾空格" 改成你自己的名字 iabbrev xmail " 改成你自己的電郵 iabbrev xfile =expand("%:t") if exists("*strftime") iabbrev xdate =strftime("%Y-%m-%d") " 當前日期 iabbrev xtime =strftime("%H:%M:%S") " 當前時間 endif 前面用戶界面一節已經提到如何高亮行尾空格,下面設置可以刪除行尾空格。
# 這個函數通過替換命令刪除行尾空格 func! DeleteTrailingWS() exec "normal mz" %s/s+$//ge exec "normal `z" endfunc " 保存時自動刪除行尾空格 au BufWrite * :call DeleteTrailingWS() map結語W :call DeleteTrailingWS() " 移除只包含空格的行里的空格(有點繞口) " 貌似有了前面的函數,這個就沒有什么必要了 map :%s/s*$//g :noh "" 配置是無窮無盡的,是樂趣也是包袱。
這篇文章,并不是我的 Vim 配置的全部,而我的 Vim 配置,也經常性的在變。
此外,我主要寫 C++ 和 Python,可能并不適合你。但是道理是一樣的,總是免不了折騰。
所以,沒有現成適用于所有人的配置,都是在別人的基礎上不斷收集和改進而成。為了避免文章太長,常用插件的介紹就另起一篇吧。
<全文完>
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25003.html
摘要:如何優雅的使用二插件介紹插件使用管理。文件管理器樹形結構的文件管理器,目前使用。不同層次的括號顏色不一樣,如下圖另見然而這些彩虹括號插件,都免不了與沖突會使語法高亮失效,只好放棄了。 如何優雅的使用 Vim(二):插件介紹 插件使用 vim-plug 管理。很長一段時間,我都在用 Vundle,切換到 vim-plug 并非完全必要。 插件定義開始 call plug#begin(~...
摘要:指令這條命令是指明最后容器需要暴露哪些端口號,這樣其他系統才能使用這個端口。但是靈活性不高,后面我在編排的時候會教大家用編排來統一開發環境。更多還有更多指令大家看下官方文檔,我自己覺得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡單的了解了Docker的基本命令,這篇文章呢,我們來了解下Dockerfile這個文件。 一個神奇的文件:Dockerfile 我不知道有多少同學...
摘要:指令這條命令是指明最后容器需要暴露哪些端口號,這樣其他系統才能使用這個端口。但是靈活性不高,后面我在編排的時候會教大家用編排來統一開發環境。更多還有更多指令大家看下官方文檔,我自己覺得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡單的了解了Docker的基本命令,這篇文章呢,我們來了解下Dockerfile這個文件。 一個神奇的文件:Dockerfile 我不知道有多少同學...
閱讀 2077·2023-04-25 19:15
閱讀 2245·2021-11-23 09:51
閱讀 1264·2021-11-17 09:33
閱讀 2165·2021-08-26 14:15
閱讀 2476·2019-08-30 15:54
閱讀 1582·2019-08-30 15:54
閱讀 2167·2019-08-30 12:50
閱讀 1132·2019-08-29 17:08