成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

如何優(yōu)雅的使用 Vim(一):基本配置

張巨偉 / 856人閱讀

摘要:如何優(yōu)雅的使用一基本配置十年,青春不再轉(zhuǎn)眼間,已用了十年。對(duì)程序員來(lái)說(shuō),用制表符還是用空格,足以引發(fā)一場(chǎng)戰(zhàn)爭(zhēng)。

如何優(yōu)雅的使用 Vim(一):基本配置 Vim 十年,青春不再

轉(zhuǎn)眼間,Vim 已用了十年。
從一開(kāi)始的抵觸、不解,到隨之而來(lái)的習(xí)慣、喜歡,再到近幾年編輯器層出不窮的盛況下對(duì) Sublime Text 等短暫的嘗試,以及最后即現(xiàn)在的回歸,這是一個(gè)復(fù)雜的過(guò)程。
目前,我對(duì) Vim 仍停留在配置和使用階段,并沒(méi)有為它開(kāi)發(fā)過(guò)任何插件。希望接下來(lái)十年,能為它做一些貢獻(xiàn)。
Vim 是一個(gè)難學(xué)難上手,即使熟悉了也會(huì)讓你痛并快樂(lè)著的那種編輯器。要教別人用 Vim,就更是難上加難了。

從 如何評(píng)價(jià)GitHub準(zhǔn)備推出下一代文本編輯器Xray? 一文,可以看到時(shí)下不少編輯器的嘗試。軟件行業(yè)發(fā)展到今天,編輯器遠(yuǎn)遠(yuǎn)沒(méi)有達(dá)到一個(gè)完美的境界,包括 Vim,這本身就是一件很不可思議的事情。

基礎(chǔ)設(shè)置

最最基本的一些設(shè)置,位于 vimrc 的開(kāi)頭。

" 首先設(shè)置 mapleader,后面鍵盤(pán)映射隨時(shí)要用
" 基本上所有自定義的快捷鍵都以這個(gè)字符打頭,比如映射`,w`為`:w`
let mapleader = ","
let g:mapleader = ","

" 不兼容 Vi,最大限度使用新特性
set nocompatible

" 寫(xiě)入文件時(shí),不做備份
set nobackup
set nowritebackup

" 不用交換文件
set noswapfile

" 保存文件的快捷鍵
nmap w :w!

" 移除 Windows 文件結(jié)尾的 `^M`
noremap m :%s///ge

" 重新打開(kāi)文件時(shí),恢復(fù)上一次游標(biāo)位置
" 通過(guò)View可以記住很多設(shè)置,比如高亮當(dāng)前行、折行等等,但是往往比較讓人費(fèi)解
set viewoptions=cursor  " 只記住游標(biāo)
au BufWinLeave ?* mkview
au VimEnter ?* silent loadview

" 檢測(cè)文件編碼時(shí),優(yōu)先考慮 UTF-8
set fileencodings=utf-8,ucs-bom,gbk,gb2312,big5,latin1

" 不同平臺(tái),設(shè)置不同的行尾符,即 EOL
" 注意:在 Mac 平臺(tái),也是 unix 優(yōu)先;自 OS X 始,行尾符與 Unix 一致,
"      都是 `
` 而不是 `
`
if has("win32")
    set fileformats=dos,unix,mac
else
    set fileformats=unix,mac,dos
endif

" 在斷行、合并(join)行時(shí),針對(duì)多字節(jié)字符(比如中文)的優(yōu)化處理
set formatoptions+=mM
配色方案

目前主要使用 morhetz/gruvbox,本文所有截圖都是 gruvbox 的效果。
配色方案可以通過(guò)插件安裝,這里先跳過(guò),會(huì)有另一篇文章專(zhuān)門(mén)介紹插件。

set background=dark
syntax enable
colorscheme gruvbox
au BufEnter * :syntax sync fromstart
格式 縮進(jìn)選項(xiàng)
" 采用 C 風(fēng)格的縮進(jìn),適用于大多數(shù)語(yǔ)言
" 細(xì)節(jié)調(diào)整見(jiàn)下面的 `cinoptions`
" 你也可以嘗試 smartindent 和 autoindent
set cindent

" 細(xì)節(jié)調(diào)整,主要為了適應(yīng) Google C++ Style
" t0: 函數(shù)返回類(lèi)型聲明不縮進(jìn)
" g0: C++ "public:" 等聲明縮進(jìn)一個(gè)字符
" h1: C++ "public:" 等聲明后面的語(yǔ)句縮進(jìn)一個(gè)字符
" N-s: C++ namespace 里不縮進(jìn)
" j1: 合理的縮進(jìn) Java 或 C++ 的匿名函數(shù),應(yīng)該也適用于 JS
set cinoptions=t0,g1,h1,N-s,j1
制表符 vs. 空格

讓制表符智能一些。

set smarttab

對(duì)程序員來(lái)說(shuō),用制表符還是用空格,足以引發(fā)一場(chǎng)戰(zhàn)爭(zhēng)。
美劇《硅谷》中,Richard 因?yàn)椴荒芙邮芘延每崭窨s進(jìn)而斷然與之分手。
下面的設(shè)置并不優(yōu)雅,各人需求不一樣,需做相應(yīng)調(diào)整。

" 先設(shè)置缺省情況,然后根據(jù)不同文件類(lèi)型再次重新設(shè)置
set expandtab | set tabstop=4 | set shiftwidth=4  " Python, CSS, etc.

" 對(duì) C/C++ 等,制表符和縮進(jìn)都是兩個(gè)空格
au FileType c,cpp,html,htmldjango,lua,javascript,nsis
     set expandtab | set tabstop=2 | set shiftwidth=2

" Makefile 必須保留制表符,且習(xí)慣上占八個(gè)空格
" 不過(guò),這年頭誰(shuí)還會(huì)寫(xiě) Makefile?
au FileType make set noexpandtab | set tabstop=8 | set shiftwidth=8
文本寬度

除了縮進(jìn),另一個(gè)深具爭(zhēng)議的話題就是 80列 限制。

雖然現(xiàn)在顯示器大了很多,有些語(yǔ)言習(xí)慣上仍然遵守這一規(guī)則。

通過(guò)設(shè)置 textwidth,Vim 可以幫我們?cè)谳斎霑r(shí)或用gq格式化時(shí)自動(dòng)斷行。

我發(fā)現(xiàn),用 gq 格式化注釋特別方便,超長(zhǎng)的注釋會(huì)自動(dòng)重新排版,以保證不越過(guò)指定的長(zhǎng)度。

目前,我僅對(duì) C/C++/Python/Vim 做這種限制。

au FileType c,cpp,python,vim set textwidth=80

一般如果設(shè)定了寬度限制,最好能畫(huà)一條豎線以警示。
設(shè)置 colorcolumn 即可。甚至可以設(shè)置為多列,比如 "81,101"。
我是所有文件類(lèi)型都顯示這么一條線。

set colorcolumn=81
折行

通常代碼不需折行,前面有些語(yǔ)言設(shè)置了寬度限制就更不需要了。
實(shí)際操作下來(lái),純文本、Markdown、XML 等比較需要折行,因?yàn)樗鼈兂3R恍刑L(zhǎng)了。

au FileType text,markdown,html,xml set wrap

" 折行時(shí),以單詞為界,以免切斷單詞
set linebreak
" 折行后的后續(xù)行,使用與第一行相同的縮進(jìn)
set breakindent
用戶(hù)界面
" 即使在終端,也盡量啟用鼠標(biāo)
if has("mouse") | set mouse=a | endif

" 顯示輸入中的命令,對(duì) gqq/gcc 這種多個(gè)字符的命令特別有用
set showcmd
" 下面幾個(gè)不解釋?zhuān)孕胁榭磶椭?set scrolloff=7
set wildmenu
set wildmode="list:longest"
set ruler
" 命令行高度為兩行
set cmdheight=2

" 永遠(yuǎn)顯示行號(hào)
" 另有比較酷的相對(duì)行號(hào)(`relativenumber`),雖然我用不習(xí)慣
set number

set lazyredraw
" 切換緩存時(shí)不用保存
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+\%#@

高亮當(dāng)前行。

set cursorline

不過(guò),我一般不用,因?yàn)殚W爍的游標(biāo)就已經(jīng)很清楚了。

搜索

首先,搜索時(shí)忽略大小寫(xiě)(ignorecase)。但是,如果搜索模式里有大寫(xiě)字母,就不再忽略大小寫(xiě)(smartcase)。

set ignorecase
set smartcase

即時(shí)顯示匹配結(jié)果(incsearch),并高亮所有結(jié)果(hlsearch)。

set incsearch
set hlsearch
map   :nohlsearch

替換時(shí),缺省啟用g標(biāo)志,即,同一行里的所有匹配都會(huì)被替換。

set gdefault
切換窗口

切換窗口的鍵盤(pán)映射:

map  j
map  k
map  h
map  l

以及,直接用方向鍵切換緩存的鍵盤(pán)映射:

map  :bn
map   :bp
map     :bf
map   :bl
縮寫(xiě)(Abbreviation)

當(dāng)前日期、時(shí)間、文件名這些內(nèi)容,用縮寫(xiě)來(lái)輸入是再方便不過(guò)了。
當(dāng)然,縮寫(xiě)本身的名字不能太常見(jiàn),下面這些都以 x 打頭,一般不會(huì)出現(xiàn)在正常的文本中。

iabbrev xname   " 改成你自己的名字
iabbrev xmail  " 改成你自己的電郵
iabbrev xfile =expand("%:t")
if exists("*strftime")
    iabbrev xdate =strftime("%Y-%m-%d")  " 當(dāng)前日期
    iabbrev xtime =strftime("%H:%M:%S")  " 當(dāng)前時(shí)間
endif
刪除行尾空格

前面用戶(hù)界面一節(jié)已經(jīng)提到如何高亮行尾空格,下面設(shè)置可以刪除行尾空格。

# 這個(gè)函數(shù)通過(guò)替換命令刪除行尾空格
func! DeleteTrailingWS()
    exec "normal mz"
    %s/s+$//ge
    exec "normal `z"
endfunc

" 保存時(shí)自動(dòng)刪除行尾空格
au BufWrite * :call DeleteTrailingWS()
map W :call DeleteTrailingWS()

" 移除只包含空格的行里的空格(有點(diǎn)繞口)
" 貌似有了前面的函數(shù),這個(gè)就沒(méi)有什么必要了
map  :%s/s*$//g:noh""
結(jié)語(yǔ)

配置是無(wú)窮無(wú)盡的,是樂(lè)趣也是包袱。
這篇文章,并不是我的 Vim 配置的全部,而我的 Vim 配置,也經(jīng)常性的在變。
此外,我主要寫(xiě) C++ 和 Python,可能并不適合你。但是道理是一樣的,總是免不了折騰。
所以,沒(méi)有現(xiàn)成適用于所有人的配置,都是在別人的基礎(chǔ)上不斷收集和改進(jìn)而成。

為了避免文章太長(zhǎng),常用插件的介紹就另起一篇吧。

<全文完>

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/25003.html

相關(guān)文章

  • 如何優(yōu)雅使用 Vim(二):插件介紹

    摘要:如何優(yōu)雅的使用二插件介紹插件使用管理。文件管理器樹(shù)形結(jié)構(gòu)的文件管理器,目前使用。不同層次的括號(hào)顏色不一樣,如下圖另見(jiàn)然而這些彩虹括號(hào)插件,都免不了與沖突會(huì)使語(yǔ)法高亮失效,只好放棄了。 如何優(yōu)雅的使用 Vim(二):插件介紹 插件使用 vim-plug 管理。很長(zhǎng)一段時(shí)間,我都在用 Vundle,切換到 vim-plug 并非完全必要。 插件定義開(kāi)始 call plug#begin(~...

    yeooo 評(píng)論0 收藏0
  • PHP下如何優(yōu)雅使用Docker來(lái)構(gòu)建環(huán)境(二)

    摘要:指令這條命令是指明最后容器需要暴露哪些端口號(hào),這樣其他系統(tǒng)才能使用這個(gè)端口。但是靈活性不高,后面我在編排的時(shí)候會(huì)教大家用編排來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境。更多還有更多指令大家看下官方文檔,我自己覺(jué)得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡(jiǎn)單的了解了Docker的基本命令,這篇文章呢,我們來(lái)了解下Dockerfile這個(gè)文件。 一個(gè)神奇的文件:Dockerfile 我不知道有多少同學(xué)...

    longshengwang 評(píng)論0 收藏0
  • PHP下如何優(yōu)雅使用Docker來(lái)構(gòu)建環(huán)境(二)

    摘要:指令這條命令是指明最后容器需要暴露哪些端口號(hào),這樣其他系統(tǒng)才能使用這個(gè)端口。但是靈活性不高,后面我在編排的時(shí)候會(huì)教大家用編排來(lái)統(tǒng)一開(kāi)發(fā)環(huán)境。更多還有更多指令大家看下官方文檔,我自己覺(jué)得上面的指令算是使用比較多的了。 前言 上一篇文章呢,我們簡(jiǎn)單的了解了Docker的基本命令,這篇文章呢,我們來(lái)了解下Dockerfile這個(gè)文件。 一個(gè)神奇的文件:Dockerfile 我不知道有多少同學(xué)...

    jollywing 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<