Git時代的VIM不徹底使用教程

2012-11-27 By BeiYuu javascript

最近整理了VIM的配置,換上插件管理的神器—–Vundle,由他引起的VIM生態環境的改善,堪稱完美。遂打算寫一份簡單的教程,分享Git時代VIM新世界的美麗動人之處。對VIM有基礎的同窗,可直接跳至插件管理部分。 php

VIM的模式

第一次使用VIM,會以爲無所適從,他並不像記事本,你敲什麼鍵就顯示什麼,理解VIM的須要明白他的兩種模式: css

  • 命令模式 (Command Mode)
  • 編輯模式 (Insert Mode)

命令模式下,能夠作移動、編輯操做;編輯模式則用來輸入。鍵入i,o,s,a等便可進入編輯模式,後面解釋緣由。 html

模式的設計是VIM和其餘編輯器最不一樣的地方,優點和劣勢也全基於此而生。 前端

基本操做

如下介紹的鍵盤操做,都是大小寫敏感的,而且要在命令模式下完成,需注意: java

以字爲單位的移動

  • h 向左移動一個字
  • j 向下移動一行
  • k 向上
  • l 向右

這四個鍵在右手最容易碰到幾個位置,最爲經常使用。 git

以詞爲單位的移動

  • w 下一個word w(ord)
  • W 下一個word(跳過標點)
  • b 前一個word b(ackward)
  • B 前一個word(跳過標點)
  • e 跳到當前word的尾端 e(nd)

行移動

  • 0 跳到當前行的開頭 - ^ 跳到當前行第一個非空字符 - $ 跳到行尾

助記:0(第0個字符),^和$含義同正則表達式 github

段落移動

- { 上一段(以空白行分隔) - } 下一段(以空白行分隔) - % 跳到當前對應的括號上(適用各類配對符號) web

跳躍移動

  • /xxxx 搜索xxxx,而後能夠用n下一個,N上一個移動 - # 向前搜索光標當前所在的字 - * 向後搜索光標當前所在的字
  • fx 在當前行移動到光標以後第一個字符x的位置 f(ind)x
  • gd 跳到光標所在位置詞(word)的定義位置 g(o)d(efine)
  • gg 到文檔頂部
  • G 到文檔底部
  • :x 跳到第x行(x是行號)
  • ctrl+d 向下翻頁 d(down)
  • ctrl+u 向上翻頁 u(p)

基本編輯

修改

  • i 在光標當前位置向前插入 i(nsert)
  • I 在本行第一個字符前插入
  • a 在光標當前位置向後插入 a(fter)
  • A 在本行末尾插入
  • o 向下插入一行
  • O 向上插入一行
  • :w 保存
  • :q 退出
  • :wq 保存並退出

刪除

  • x 刪除當前字符
  • dd 刪除當前行 d(elete)
  • dw 刪除當前光標下的詞 d(elete)w(ord)

複製粘貼

  • yy 複製當前行 y(ank)
  • yw 複製當前光標下的詞 y(ank)w(ord)
  • p 粘貼 p(aste)
  • P 粘貼在當前位置以前

進階操做

限於篇幅,在這裏我僅介紹下我很是經常使用的幾個操做。 正則表達式

重複操做

由於VIM全部的操做都是原子化的,因此把這些操做程序化就很是簡單了:

  • 5w 至關於按五次w鍵;
  • 6j 下移6行,至關於按六次j;
  • 3J 大寫J,原本是將下一行與當前行合併,加上數量,就是重複操做3次;
  • 6dw和d6w 結果是同樣,就是刪除6個word; - 剩下的無數狀況,本身類推吧。

高效編輯

  • di" 光標在」「之間,則刪除」「之間的內容
  • yi( 光標在()之間,則複製()之間的內容
  • vi[ 光標在之間,則選中之間的內容
  • 以上三種能夠自由組合搭配,效率奇高,i(nner)
  • dtx 刪除字符直到碰見光標以後的第一個x字符
  • ytx 複製字符直到碰見光標以後的第一個x字符

標記和宏(macro)

  • ma 將當前位置標記爲a,26個字母都可作標記,mb、mc等等;
  • 'a 跳轉到a標記的位置; - 這是一組很好的文檔內標記方法,在文檔中跳躍編輯時頗有用;
  • qa 將以後的全部鍵盤操做錄製下來,直到再次在命令模式按下q,並存儲在a中;
  • @a 執行剛剛記錄在a裏面的鍵盤操做;
  • @@ 執行上一次的macro操做;
  • 宏操做是VIM最爲神奇的操做之一,須要慢慢體會其強大之處;

VIM的基本操做,能夠挖掘的東西很是多,不只僅須要記憶,更須要本身去探索總結,熟練以後,效率會大幅度提高。後面會給出一些參考連接。

插件管理

Vundle

終於到這篇Blog我最想討論的部分了。VIM的強大不只僅體如今操做的高效率,更有強大而充沛的插件作支援,插件豐富了以後,就面臨查找和管理的問題。

在碰見Vundle以前,我用Pathogen管理插件。Pathogen還算方便,只須要把相應插件,放在bundle目錄下便可,不須要再像之前那樣逐個放置單獨的文件到相應目錄,大大節省了勞動力,管理起來也一目瞭然,以爲還不錯,至少比vimball那種須要執行命令安裝的方式好一些。

我真但願我早些碰見Vundle。Vundle受到Pathogen和Vimball的啓發,因而有了如今的模樣。Vundle的邏輯是這樣的:

  • Vim Script選好你想要的插件;
  • 在VIM的配置文件中寫一句 Bundle plugin_name;
  • 執行一下Vundle的初始化命令,插件就裝好了; - 升級和卸載也是一樣的簡單;

完美的世界!

Vundle的配置

Vundle的安裝很簡單:

git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
而後寫配置文件.vimrc

set nocompatible    " be iMproved
filetype off        " required!
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'
" vim-scripts repos
Bundle 'vim-plugin-foo'
Bundle 'vim-plugin-bar'
filetype plugin indent on    " required!

其中Bundle後面的內容,就是插件的名字,插件維護在Vim-Script.org

而後,打開VIM以後,能夠輸入如下命令:

"安裝插件:
:BundleInstall
"更新插件:
:BundleInstall!
"卸載不在列表中的插件:
:BundleClean

如今大部分的插件都已經從Vim.org遷移到了Vim-Script.org,並且不少做者也認領了本身的插件,直接在這個Github的項目下更新,一個比Vim.org更科學更有效的生態環境,就這樣完美的造成了。

在此很是嚴重的感謝vim-scripts.org的建立者Scott Bronson,和Vundle的做者gmarik。他們的創新和分享精神,讓這個世界又美好了一些。

也感謝業界良心Github。Vim-Scripts.org整站就是用Github Pages創建維護的,對於我的來講,這是很好的選擇,有興趣的同窗能夠參看我以前的博客:使用Github Pages建獨立博客

插件介紹

有了Vundle,再裝插件就是件享受的事情了。我經常使用的插件有:

Bundle 'ctrlp.vim'
Bundle 'AutoClose'
Bundle 'ZenCoding.vim'
Bundle 'matchit.zip'
Bundle 'ShowTrailingWhitespace'
Bundle '_jsbeautify'
Bundle 'EasyMotion'
Bundle 'FencView.vim'
Bundle 'The-NERD-tree'
Bundle 'The-NERD-Commenter'
Bundle 'snipMate'

以上插件均可以在vim-script.org找到源碼和詳細的使用文檔,簡單說明下:

The NERDTree

這是我認爲VIM最不能缺乏的插件,在VIM的編輯窗口樹狀顯示文件目錄,沒什麼好多說的,必需品。

ctrlp.vim

相比於Command-T之類的查找文件的插件,ctrlp.vim最大的好處在於,無需安裝其餘的包,只要他本身,就能夠很好的工做了,恩,就是須要這樣乾淨利落的解決問題。

ZenCoding.vim

ZenCoding是一個神級的插件,用他可讓你一種神奇而無比爽快的感受寫HTML、CSS,官網上有動畫演示,你必定會心動的。

EasyMotion

最近看到別人介紹,開始使用的一個插件,用全新的方式在文檔中高效的移動光標,和ZenCoding同樣,屬於革命性的方便好用,這裏有教程,你必定也會心動的。

snipMate

又一個解放生產力的神奇,簡單配置,就能夠按照本身的風格快速輸入大段代碼。

其餘

  • AutoClose 能夠在你輸入一個(或者」之類的配對符號時,自動幫你補全剩餘半個;
  • matchit.zip 在()、」「、甚至HTML標籤之間快速跳轉;
  • ShowTrailingWhitespace 顯示行末的空格;
  • jsbeautify JS代碼格式化插件;
  • FencView.vim 自動識別文件編碼;
  • The-NERD-Commenter NERD出品的快速給代碼加註釋插件,選中,ctrl+h便可註釋多種語言代碼;

.vimrc配置

貼一下個人vimrc配置,註釋都有,僅供參考:

"必須的設置:
filetype off
filetype plugin indent on
"打開高亮
syntax enable
"不要兼容vi
set nocompatible
"使用color solarized
set background=dark
colorscheme solarized
"terminal下面的背景問題
let g:solarized_termtrans=1
let g:solarized_termcolors=256
let g:solarized_contrast="high"
let g:solarized_visibility="high"
set modelines=0
"tab鍵的設定
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
"一些其餘的設定
"字符設置
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5
"set encoding=utf-8
set scrolloff=3
"新建文件編碼
set fenc=utf-8
set autoindent
set hidden
"設置光標高亮顯示
set cursorline
set cursorcolumn
set ttyfast
set ruler
set backspace=indent,eol,start
"set laststatus=2
"相對行號 要想相對行號起做用要放在顯示行號後面
set relativenumber
"顯示行號
"set number
"無限undo
"set undofile
"自動換行
set wrap
"禁止自動換行
"set nowrap
"GUI界面裏的字體,默認有抗鋸齒
set guifont=Inconsolata:h12
"自動載入配置文件不須要重啓
"autocmd! bufwritepost _vimrc source %
"將-鏈接符也設置爲單詞
set isk+=-
"設置大小寫敏感和聰明感知(小寫全搜,大寫徹底匹配)
set ignorecase
set smartcase
"set gdefault
set incsearch
set showmatch
set hlsearch
"加入html標籤配對
"runtime macros/matchit.vim 
"如下設置用來是vim正確顯示過長的行
"set textwidth=80
"set formatoptions=qrnl
"彩色顯示第85行
set colorcolumn=85
"設置256色顯示
set t_Co=256
"行號欄的寬度
set numberwidth=4
"初始窗口的寬度
"set columns=135
"初始窗口的高度
"set lines=50
"初始窗口的位置
"winpos 620 45 
"匹配括號的規則,增長針對html的<>
"set matchpairs=(:),{:},[:],<:>
"讓退格,空格,上下箭頭遇到行首行尾時自動移到下一行(包括insert模式)
set whichwrap=b,s,<,>,[,]
"插入模式下移動
inoremap <c-j> <down>
inoremap <c-k> <up>
inoremap <c-l> <right>
inoremap <c-h> <left>
"===================================================
"leader鍵的功能設置
"修改leader鍵爲逗號
let mapleader=","
"esc的映射
imap jj <esc>
"屏蔽掉討厭的F1鍵
inoremap <F1> <ESC>
nnoremap <F1> <ESC>
vnoremap <F1> <ESC>
"修改vim的正則表達
nnoremap / /\v
vnoremap / /\v
"使用tab鍵來代替%進行匹配跳轉
nnoremap <tab> %
vnoremap <tab> %
"摺疊html標籤 ,fold tag
nnoremap <leader>ft vatzf
"使用,v來選擇剛剛複製的段落,這樣能夠用來縮進
nnoremap <leader>v v`]
"使用,w來垂直分割窗口,這樣能夠同時查看多個文件,若是想水平分割則<c-w>s
nnoremap <leader>w <c-w>v<c-w>l
nnoremap <leader>wc <c-w>c
nnoremap <leader>ww <c-w>w
"使用<leader>t來控制Tab的切換
nnoremap <leader>t gt
nnoremap <leader>r gT
"使用<leader>空格來取消搜索高亮
nnoremap <leader><space> :noh<cr>
"html中的js加註釋 取消註釋
nmap <leader>h I//jj
nmap <leader>ch ^xx
"切換到當前目錄
nmap <leader>q :execute "cd" expand("%:h")<CR>
"搜索替換
nmap <leader>s :,s///c
"取消粘貼縮進
nmap <leader>p :set paste<CR>
nmap <leader>pp :set nopaste<CR>
"文件類型切換
nmap <leader>fj :set ft=javascript<CR>
nmap <leader>fc :set ft=css<CR>
nmap <leader>fx :set ft=xml<CR>
nmap <leader>fm :set ft=mako<CR>
"設置隱藏gvim的菜單和工具欄 F2切換
set guioptions-=m
set guioptions-=T
"去除左右兩邊的滾動條
set go-=r
set go-=L
map <silent> <F2> :if &guioptions =~# 'T' <Bar>
        \set guioptions-=T <Bar>
        \set guioptions-=m <bar>
    \else <Bar>
        \set guioptions+=T <Bar>
        \set guioptions+=m <Bar>
    \endif<CR>
"===================================================
"插件的設置
"Indent Guides設置
let g:indent_guides_guide_size=1
set rtp+=~/.vim/bundle/vundle/
call vundle#rc()
" let Vundle manage Vundle
" required!
Bundle 'gmarik/vundle'
" vim-scripts repos
Bundle 'ctrlp.vim'
Bundle 'AutoClose'
Bundle 'ZenCoding.vim'
Bundle 'matchit.zip'
Bundle 'ShowTrailingWhitespace'
"jsbeautify的設置
Bundle '_jsbeautify'
nnoremap <leader>_ff :call g:Jsbeautify()<CR>  
"EasyMotion設置
Bundle 'EasyMotion'
let g:EasyMotion_leader_key = '<Leader><Leader>' 
"Fencview的初始設置
Bundle 'FencView.vim'
let g:fencview_autodetect=1
"NerdTree的設置 而且相對行號顯示
Bundle 'The-NERD-tree'
nmap <leader>nt :NERDTree<cr>:set rnu<cr>
let NERDTreeShowBookmarks=1
let NERDTreeShowFiles=1
let NERDTreeShowHidden=1
let NERDTreeIgnore=['\.$','\~$']
let NERDTreeShowLineNumbers=1
let NERDTreeWinPos=1
"對NERD_commenter的設置
Bundle 'The-NERD-Commenter'
let NERDShutUp=1
"支持單行和多行的選擇,//格式
map <c-h> ,c<space>

更多

VIM在一開始會以爲很是不習慣,必定要堅持下去,收穫的會更多,不只僅是在裝大俠方面的哦~

關於VIM的使用,這篇博客僅僅介紹了很小的一部分,網絡上還有大量朋友總結的心得,常學常有收穫:

相關文章
相關標籤/搜索