2013年2月10日 星期日

my vim

基本工作模式

  1. Insert
  2. Normal
  3. Visual
  4. Select

其模式切換方法

image

  • Normal mode
    • Montion(:h motion.txt)
  • Insert mode
    • Edit text
    • image
  • Visual mode
    • Select regiion
    • image

 

語法標記Syntax Highlight support

  • 可自定Syntax
  • image
  • :h syntax.txt

編碼支授(encode support)

image

:h encoding.txt

 

Key mapping(快捷鍵)

image

image

image

image

:h help.txt

 

文字物件(text object)

image

image

image

 

分頁支援 Tab Papges)

image

image

:h tabpage.txt

 

程式折疊(Folds)

image

image

image

image

image

image

image

image

image

image

 

File Type

image

 

格式化(Format)

image

image

image

 

而在我的Vim,我則是另外找個別人包裝好的

http://c9s.blogspot.tw/2007/09/enhanced-gvim-package-for-win32.html

在其中,已有了

Features:
- The NERD Tree ( Plugin )
- The NERD Commenter ( Plugin )
- Vcscommand ( Plugin )
- Slippery Snippets ( Plugin )
- Taglist + Ctag (win32)
- Monaco Font
- Bitstream Sans Mono Font
- A lot of Colorschemes
- Context Menu ( associated with files )
Usage:
- \e to open the NERD Tree Explorer
- \t to open the Taglist Window

 

再去介紹各個Plugin的使用

The NERD Tree ( Plugin )

" ----------------------------
" 基本操作
o: 開檔/資料匣/書籤
x: 關資料匣
O: 開資料匣包含子資料匣
X: 關資料匣包含子資料匣
D: 刪除書籤
" ----------------------------
" 巡訪樹快速鍵
P: 到根目錄
p: 到母節點
K: 到第一個兄節點
J: 到最後一個兄節點
Ctrl+j: 到下一個兄節點
Ctrl+k: 到上個兄節點
" ----------------------------
" 檔案系統
C: 改變根目錄至所選資料匣
u: 改變根目錄至上一層的根目錄
U: 改變根目錄至上一層的根目錄且原來的目錄開著
cd: 改變工作目錄到現在所選目錄
" ----------------------------
" 書籤指令
:Bookmark <name>
:BookmarkToRoot <name>
:RevealBookmark <name>
:OpenBookmark <name>
:ClearBookmarks [<name>]
:ClearAllBookmarks

The NERD Commenter ( Plugin ), 加註解

image

在Normal或者Visual 模式下:

  • ,ca,在可选的注释方式之间切换,比如C/C++ 的块注释/* */和行注释//
  • ,cc,注释当前行
  • ,cA,在当前行尾添加注释符,并进入Insert模式
  • ,cu,取消注释
  • Normal模式下,几乎所有命令前面都可以指定行数
  • Visual模式下执行命令,会对选中的特定区块进行注释/反注释

Vcscommand ( Plugin )

用來比較兩個檔案間的差別.

 

Slippery Snippets ( Plugin )

image

其中<<i>>, <<count>> 及<<>>等,都是可以依序用Tab 做跳轉

在輸入for後, Tab

*不要按Esc鍵. 每個<<>>均是直接輸入後. 用Tab跳轉

 

Taglist + Ctag (win32)

image

在這版本中,已整合進去.

我們只需以\t, 即可開啓。

而其切換, Ctrl+ww

使用方式

image

- Monaco Font
- Bitstream Sans Mono Font

則是用來對

Programmer 專用最佳字型 - Monaco font

字漂亮,0OlI 很好分辨

=====================================

 

:imap jj <Esc>

而接下來,則是我自己想要新增的Plugins部份

BufExplorer

需要開啓多個檔案,同原本gvim中的Buffers的選單內容

image 

'/bs', 分割出一个水平窗口打开bufexplorer
'/bv', 分割出一个垂直窗口打开bufexplorer
常用命令, 在bufexplorer界面中输入,
enter: 打开所选选缓冲文件
t: 在一个新标签中打开所选
D: 从缓冲列表中删除所选文件项.
d: 彻底关闭所选文件

 

Registers in Vim let you run actions or commands on text stored within them. To access a register, you type "a before a command, where a is the name of a register. If you want to copy the current line into register k, you can type

image

 

折疊功能

手動產生折疊的指令是 zf、zF

zfap ,zf^ 將游標所在處的那個段落折疊成一行。

zf7G 自游標所在處至全文第 7 行折疊起來。

5zF 將游標所在處起算 5 行的內容折疊起來。

zo 將游標所在處的折疊打開。open。

zc 將游標所在處已打開的內容再度折疊起來

" 用空格键来开关折叠

supertab


image




目前我使用的組合是
自動補完: supertab
有相關的套件: snipmat
Ack.vim

Rails.vim

Ctags.vim

Quickfix.vim

===================================
vimrc file


   1: " Colorscheme
   2: "---------------------------------------------------
   3: colors zenburn
   4: "set guifont=Monaco:h10
   5: set guifont=Bitstream\ Vera\ Sans\ Mono:h10
   6: language mes en
   7: lang en
   8: set langmenu=en_US.UTF-8
   9: winsize 120 35
  10: winpos 10 20
  11:  
  12:  
  13: syntax on
  14: set nocp        "no compatible
  15: set number
  16: set ai
  17: set si
  18: set incsearch
  19: set    showcmd 
  20: set    shiftwidth=4
  21: set    tabstop=4
  22: set    noeb novb ruler
  23: set    ignorecase
  24: set    backspace=indent,eol,start
  25: set    history=60
  26: set wildmenu
  27:  
  28:  
  29: " encoding
  30: set        fileencodings=utf-8,big5,euc-jp,utf-bom,iso8859-1
  31: set        encoding=utf-8
  32: set        termencoding=utf-8
  33: set        fileencoding=utf-8
  34:  
  35:  
  36:  
  37: filetype on
  38: filetype plugin on
  39:  
  40:  
  41: imap    <F2>    <C-R>=strftime("%c")<CR>
  42:  
  43: nmap    ,te :tabedit<SPACE>
  44: nmap    ,tx    :tabedit .<CR>
  45: nmap    ,th    :tab help<CR>
  46: nmap    ,tn    :tabnew<CR>
  47:  
  48:  
  49: " ctags
  50: let Tlist_Ctags_Cmd = $VIM . '/ctags/ctags.exe'
  51: nmap    <;leader>t    :TlistToggle<CR>
  52:  
  53: " snippet
  54: set runtimepath+=$VIM\snippets\after
  55: set runtimepath+=$VIM\snippets
  56: let g:snip_start_tag = "«"
  57: let g:snip_end_tag = "»"
  58:  
  59: " vcscommand
  60: set runtimepath+=$VIM\vcscommand
  61:  
  62: " nerd tree
  63: nmap    <leader>e    :NERDTreeToggle<CR>
  64:  
  65: " paste
  66: set pastetoggle=<;leader>p
  67:  
  68:  " 与windows共享剪贴板
  69: set clipboard+=unnamed
  70:  " 不要备份文件(根据自己需要取舍)
  71: set nobackup
  72: " 不要生成swap文件,当buffer被丢弃的时候隐藏它
  73: setlocal noswapfile
  74: set bufhidden=hide
  75:  " 在状态行上显示光标所在位置的行号和列号
  76: set ruler
  77: set rulerformat=%20(%2*%<;%f%=\ %m%r\ %3l\ %c\ %p%%%)
  78:  """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  79: " 搜索和匹配
  80: """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  81: " 高亮显示匹配的括号
  82: set showmatch
  83: " 匹配括号高亮的时间(单位是十分之一秒)
  84: set matchtime=1
  85: " 在搜索的时候忽略大小写
  86: set ignorecase
  87:  " 用空格键来开关折叠
  88:   set foldenable
  89:   set foldmethod=manual
  90:   nnoremap <space> @=((foldclosed(line('.')) < 0) ? 'zc' : 'zo')<CR>
  91:  """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  92: " Autocommands
  93: """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  94: " 只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示
  95:  
  96:   if has("autocmd")
  97:     autocmd FileType xml,html,css,js,c,cs,java,perl,shell,bash,cpp,python,vim,php,ruby,markdown,sh,md set number
  98:     autocmd FileType xml,html vmap <C-o> <ESC>'<i<!--<ESC>o<ESC>'>o-->
  99:     autocmd FileType java,c,cpp,cs vmap <C-o> <ESC>'<o
 100:     autocmd FileType html,text,php,vim,c,java,xml,bash,shell,perl,python setlocal textwidth=100
 101: autocmd FileType html,htmldjango,jinjahtml,eruby,mako let b:closetag_html_style=1
 102: autocmd FileType html,xhtml,xml,htmldjango,jinjahtml,eruby,mako source ~/.vim/bundle/closetag.vim/plugin/closetag.vim
 103:     autocmd BufReadPost *
 104:       \ if line("'\"") >; 0 && line("'\"") <= line("$") |
 105:       \ exe " normal g`\"" |
 106:       \ endif
 107:   endif "has("autocmd")
 108:  
 109: " F5编译和运行C程序,F6编译和运行C++程序
 110: " 请注意,下述代码在windows下使用会报错
 111: " 需要去掉./这两个字符
 112: " C的编译和运行
 113:   map <;F5> :call CompileRunGcc()<CR>
 114:   func! CompileRunGcc()
 115:   exec "w"
 116:   exec "!gcc % -o %<"
 117:   exec "! %<"
 118:   endfunc
 119: " C++的编译和运行
 120:   map <F6> :call CompileRunGpp()<CR>
 121:   func! CompileRunGpp()
 122:   exec "w"
 123:   exec "!g++ % -o %<;"
 124:   exec "! %<"
 125:   endfunc
 126:  
 127: let g:SuperTabDefaultCompletionType = "context"
 128: let g:snips_trigger_key='<;F3>' 
 129: :imap jj <;Esc>
 130: