vim

Vim是從vi發展出來的一個文字編輯器。其代碼補完、編譯及錯誤跳轉等方便編程的功能特別豐富,在程式設計師中被廣泛使用。和Emacs並列成為類Unix系統用戶最喜歡的編輯器。 Vim的第一個版本由布萊姆·米勒在1991年發布。

Vim 高級技巧

常用技巧
命令執行(注意大小寫不同)  使用說明  使用技巧
 i 以插入字元方式進入編輯模式 與 a 同為進入編輯模式,兩者差別只有游標的起始位置不同
 a 以附加字元方式進入編輯模式  
 h j k l 操控游標的移動,h--向左, j--向下, k--向上, l--向右 當遇到部份作業系統不支援方向鍵使用時,可用此方式代替
 :1 游標移到第一行  
 :22 游標移到第22行 作程式除錯找特定行列時會用到
 gg 游標移至檔首   
 G 游標移至檔尾 編輯大檔案時要移到檔尾不用一頁一頁捲
 0 游標移至行首  
 $ 游標移至行尾  
 :wq 存檔後離開   
 :w new.txt 另存新檔成 new.txt  
 :w !sudo tee % 以 sudo 模式存檔 如果存檔時遇到權限不足,且有 sudo 的權限時的方法
 :q! 不存檔離開  如不小心編錯內容,只要沒存檔前就可以用此法離開,保存原始內容
 :set nu 顯示行號  作程式除錯時必用 
 :set nonu 取消行號顯示  
 :set hlsearch  Highlight 搜尋的關鍵字 有些系統預設已經啟用
 : syntax on 啟用 Hihjlight 顯示  
 dd 刪除目前這一行  
 10dd 刪除目前以下10行(含本列)  
 yy 複製目前這一行  
 3yy 複製目前以下3行(含本列)  
 p 貼上  
 :%s/old/new/g 內容包含有old字元的都會取代成new字元   
:/<table>/,/<\/table>/g/^$/d 包含 <table> ... </table> 的內容刪除  
 /keyword 搜尋文字  
 /\KeyWord 搜尋文字(不分大小寫)  
 /\s\+$ 搜尋行尾的空格字元並 Highlight 這可以配合 :set hlsearch 使用
 ~ 大小寫互換  
 :%s/[ctrl+V and ctrl+M]//g 消除斷行符號 ^M  
 :%s/\s\+$// 移除所有行尾的空格字元  
:1,$d 清空所有內容  
:1,22d 清除 1-22 行  
:23,$d 清除 23 行以下所有內容  
 :! ls -l 執行外部 SHELL 指令  :!! 上一個指令
 :vsplit my.file 左右分割視窗且左邊載入 my.file  ctrl + w + w 切換視窗
 :split my.file 上下分割視窗 ctrl + w + w 切換視窗

其他技巧:

Visual mode
快速移動技巧
取代文字技巧
情境: 在中間欄一段文字的每行行首插入多個空白字元
  1. Ctrl + v
  2. 移動上下鍵選擇區塊文字區
  3. I (shift + i)
  4. 輸入空白
  5. Esc 跳離後完成
情境: 在中間欄一段文字的每行行尾插入`;`
  1. Ctrl + v
  2. 移動上下鍵 + $ 選擇區塊文字區
  3. A (shift + a)
  4. 輸入 ;
  5. Esc 跳離後完成
vimrc
" BASIC SETUP:
" enter the current millenium
set nocompatible

" enable syntax and plugins
syntax enable
filetype plugin on

" FINDING FILES:
" Search down into subfolders
" Provides tab-compleation for all file-related tasks
set path+=**

" Display all matching files when we tab complete
set wildmenu
Q & A

Q: 貼上文字後,因為自動縮排(autoindent)因素,導致內容編排錯亂。

A: 貼上文字前先執行 :set paste 

Tutorials

Vim FAQ

Err: A line cannot be longer than 2048 characters.

這是因為 VI 的每一行字數不可超過 2048 字元,遇到時可以將超過字數的行刪除,另存一個檔。

cut -c1-2047 before.log > after.log
開啟 3X MB 檔案時出現錯誤

ex: 0602-101 Out of memory saving lines for undo.

# the number must be less than 8 digits.
vi -y 99999999 your-file

 

vimrc

vimrc
"
" minimal vimrc with no (extra) plugins
"

"regular settings
"----------------
" ui
set number
set ruler
set wildmenu
set showcmd
set showmatch

" encoding/format
set encoding=utf-8
set fileformats=unix,dos,mac

" searching
set hlsearch
set incsearch
set ignorecase
set smartcase

" indent
set shiftwidth=4
set tabstop=4
set softtabstop=4
set autoindent

" allow syntax and filetype plugins
syntax enable
filetype plugin indent on
runtime macros/matchit.vim

" autocmds
"---------
augroup general
    autocmd!
    "keep equal proportions when windows resized
    autocmd VimResized * wincmd =
    "save cursor position in a file
    autocmd BufReadPost * if line("'\"") > 1 && line("'\"")
                \ <= line("$") | exe "normal! g'\"" | endif
augroup END

augroup languages
    autocmd!
    autocmd BufNewFile,BufRead *.bash set syntax=sh
    autocmd FileType python xnoremap <leader>r <esc>:'<,'>:w !python3<CR>
    autocmd FileType go set noexpandtab
    autocmd FileType html :syntax sync fromstart
    autocmd FileType html,javascript,css,json,yaml,sh
                \ setlocal ts=2 sts=2 sw=2 expandtab
augroup END
Learning