- 取得連結
- X
- 以電子郵件傳送
- 其他應用程式
軟體:Vim
官網
GitHub
簡介:自用設定
Learn Vimscript the Hard Way
Learn Vimscript the Hard Way (中文版)
給程式設計師的Vim入門圖解說明
Vim Bootstrap
Vim 的哲学(三)
30分钟学会vim之vimtutor(双语版).txt
個人化自己的vim文字編輯器(.vimrc設定教學)
vimrc設定教學
官網
GitHub
簡介:自用設定
載入指定的 vimrc
vim -u .vimrc
基本設定
- 相關操作
- 加上 no 可取消指令,例:set nonumber
- 查詢目前設定,加上 ?,例:set number?
set nocompatible
- 不使用與 VI 相容的模式,可使用 vim 新功能,例:tab 自動補齊
set number
set relativenumber
set ruler
set showmode
set showcmd
syntax enable syntax on
set wildmenu
set wildmode=longest:list,full
set autoindent
- 自動對齊縮排,follow 上一行的 tab 寬度
set smarttab set shiftwidth=4 set tabstop=4
- smartttab 影響 shiftwidth 和 tabstop 行為
若 shiftwidth=8,tabstop=4
行首鍵入 <TAB> 會產生 8 個空格距離,其他地方鍵入 <TAB> 會產生 4 個空格距離 set expandtab
- 將 <TAB> 轉為空格
set softtabstop=4
- 影響刪除 <TAB> 空格的動作,但不影響刪除 <Space> 的動作
set cursorline
filetype on
- 偵測檔案類型
- 實際上執行 $VIMRUNTIME/filetype.vim
filetype indent on
- 依檔案類型進行縮排
- 實際上執行 $VIMRUNTIME/indent.vim
filetype plugin on
- 依檔案類型載入相關 plugin
- 實際上執行 $VIMRUNTIME/ftplugin.vim
set fileencodings=ucs-bom,utf-8,cp950,big5,euc-jp,euc-kr,latin1
- 依序自動偵測編碼
ucs-bom 是一種非常嚴格的編碼,幾乎沒有可能被誤判,故放在第一位
utf-8 也相當嚴格,現實生活中一般文件是幾乎不可能被誤判的,因此放在第二位 set showmatch
- 輸入括號時,單獨顯示對應括號
set matchtime=1
- 影響 showmatch 顯示對應括號的時間,1 表示 100ms
set hlsearch
set incsearch
set ignorecase
set smartcase
set scrolloff=5
- 移動時,保留的行數
例:設置值為 5,向上或向下移動到屏幕接近邊緣還剩 5 行時,屏幕就會開始滾動 set nobackup
- 關閉備份設定
set noswapfile
- 關閉交換文件設定
set noundofile
- 關閉 undo 備存設定
set background=dark
- 設定配色主題 dark or light
colorscheme torte
- 設定配色主題為 torte
set list
set listchars=eol:e,tab:<-,trail:.
set ttimeoutlen=10
- 功能鍵超時檢測
會影響 insert mode 到 nomarl mode 的切換時間 set backspace=indent,eol,start
- insert mode 下,backspace 正常動作
set t_RV=
set novisualbell set visualbell t_vb=
- 關閉可視化響鈴 和 置空錯誤鈴聲的終端程式碼
Plugins
推薦 Plugins,可參考 VimAwesome
- vim-plug
- 管理 plugin,可自定 plugin 載入條件
- asins/vimcdoc
- 簡體中文文檔
- scrooloose/nerdtree
- 檔案樹狀圖
- vim-airline/vim-airline
vim-airline/vim-airline-themes - 漂亮的 status line
- junegunn/fzf
junegunn/fzf.vim
BurntSushi/ripgrep - 模糊搜索,建議搭配 rg(ripgrep)
- Valloric/YouCompleteMe
- 自動完成字詞,無需再按 ctrl-n
- scrooloose/syntastic
- 語法檢查
- tpope/vim-fugitive
- git 整合工具
- airblade/vim-gitgutter
- 顯示 git 差異
- fatih/vim-go
- go 的 vim 整合工具
- ambv/black
- python 格式化代碼
特殊設定
更改 cursor 形態
Normal 模式為矩形,Insert 模式為直線,Replace 模式為下底線
命令列別名設定
Normal 模式為矩形,Insert 模式為直線,Replace 模式為下底線
let &t_SI = "\<Esc>[6 q" let &t_SR = "\<Esc>[4 q" let &t_EI = "\<Esc>[2 q"
命令列別名設定
cnoreabbrev W! w! cnoreabbrev Q! q! cnoreabbrev Qall! qall! cnoreabbrev Wq wq cnoreabbrev Wa wa cnoreabbrev wQ wq cnoreabbrev WQ wq cnoreabbrev W w cnoreabbrev Q q cnoreabbrev Qall qall
完整 vimrc 設定
" 设定 doc 文档目录
"let helptags=$VIM."/vimfiles/doc"
"set helplang=cn
" for 異常設定
" insert mode 下,backspace 正常動作
set backspace=indent,eol,start
" 不使用與 VI 相容的模式,使用 vim 新功能,例:tab 自動補齊
set nocompatible
" BUG:http://bugs.debian.org/608242
set t_RV=
" 關閉使用可視化響鈴
set novisualbell
" 置空錯誤鈴聲的終端程式碼
set t_vb=
" 顯示行號
set number
" 顯示對應行號
set relativenumber
" 顯示目前行列
set ruler
" 顯示目前的 mode
set showmode
" 顯示目前指令
set showcmd
" 保留個人設定的語法 Highlight
syntax enable
" 預設語法 Highlight
" syntax on
" 在命令列,補齊時出現選單
set wildmenu
" 在命令列,補齊依序設定
" 1. 補成最長可能性並列出選單
" 2. 選擇完整指令
set wildmode=longest:list,full
" 自動對齊縮排:如果上一行有兩個 tab 的寬度,按 enter 繼續編輯下一行時會自動保留兩個 tab 鍵的寬度
set autoindent
" 影響 shiftwidth 和 tabstop 行為
" 若 shiftwidth=8, tabstop=4
" 行首鍵入 <TAB> 會產生 8 個空格距離,其他地方鍵入 <TAB> 會產生 4 個空格距離
set smarttab
set shiftwidth=4
set tabstop=4
" 將 <TAB> 轉為空格
set expandtab
" 影響刪除 <TAB> 空格的動作,但不影響刪除 <Space> 的動作
set softtabstop=4
" 標示目前行數
set nocursorline
" 偵測檔案類型
filetype on
" 依檔案類型進行縮排
filetype indent on
" 依檔案類型載入相關 plugin
filetype plugin on
" 輸入括號時,單獨顯示對應括號
set showmatch
" 顯示對應括號的時間,1 表示 100ms
set matchtime=1
" Search 後,highlight 所有匹配字
set hlsearch
" Search 時,自動跳到目標
set incsearch
" Search 忽略大小寫
set ignorecase
" Search 若關鍵字有大寫,則忽略 ignorecase 設定
set smartcase
" 移動時,保留的行數
set scrolloff=5
" 備份設定
set nobackup
" 交換文件設定
set noswapfile
" undo 備存設定
set noundofile
"顯示不可見字元,並設定不可見字元的對應符號
set list listchars=eol:¬,tab:▸\ ,trail:.,
" 設定為暗色系
set background=dark
" 設定配色主題
colorscheme torte
" 功能鍵超時檢測,會影響 insert mode 到 nomarl mode 的切換時間
set ttimeoutlen=10
" 設定參數
let codingFT = ['go', 'python']
" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')
" Make sure you use single quotes
" 中文化(簡體)幫助文件
"Plug 'asins/vimcdoc'
" 檔案樹狀圖
Plug 'scrooloose/nerdtree', { 'on': ['NERDTreeToggle', 'NERDTreeFind'] }
" status line
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
" 模糊搜索
" PlugInstall and PlugUpdate will clone fzf in ~/.fzf and run the install script
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }
Plug 'junegunn/fzf.vim'
" 自動完成
Plug 'Valloric/YouCompleteMe'", { 'for': codingFT }
" 語法檢查
Plug 'scrooloose/syntastic', { 'for': codingFT }
" Git
Plug 'tpope/vim-fugitive', { 'for': codingFT }
"Plug 'airblade/vim-gitgutter', { 'for': codingFT }
" golang
Plug 'fatih/vim-go', { 'do': ':GoUpdateBinaries', 'for': codingFT[0] }
" Python 格式化代碼
Plug 'ambv/black', { 'for': codingFT[1] }
" Initialize plugin system
call plug#end()
"=====================================
" Plugin Setting
"===================================
" vim-go settings
let g:go_fmt_command = "goimports"
"let g:go_list_type = "quickfix"
set completeopt-=preview
" ycm
let g:ycm_autoclose_preview_window_after_completion=1
set completeopt=menu,menuone
let g:ycm_add_preview_to_completeopt = 0
let g:ycm_show_diagnostics_ui = 0
" airline
let g:airline_theme='bubblegum'
let g:airline#extensions#tabline#enabled = 1
"" NERDTree configuration
let g:NERDTreeChDirMode=2
let g:NERDTreeIgnore=['\.rbc$', '\~$', '\.pyc$', '\.db$', '\.sqlite$', '__pycache__']
let g:NERDTreeSortOrder=['^__\.py$', '\/$', '*', '\.swp$', '\.bak$', '\~$']
let g:NERDTreeShowBookmarks=1
let g:nerdtree_tabs_focus_on_files=1
let g:NERDTreeMapOpenInTabSilent = '<RightMouse>'
let g:NERDTreeWinSize = 50
set wildignore+=*/tmp/*,*.so,*.swp,*.zip,*.pyc,*.db,*.sqlite
"" fzf.vim
set wildignore+=*.o,*.obj,.git,*.rbc,*.pyc,__pycache__
"let $FZF_DEFAULT_COMMAND = "find * -path '*/\.*' -prune -o -path 'node_modules/**' -prune -o -path 'target/**' -prune -o -path 'dist/**' -prune -o -type f -print -o -type l -print 2> /dev/null"
let $FZF_DEFAULT_COMMAND = "rg --files --smart-case --no-ignore-vcs --hidden"
" syntastic
let g:syntastic_go_checkers = ['govet', 'golint', 'errcheck']
let g:syntastic_python_checkers=['flake8']
let g:syntastic_mode_map = { 'mode': 'active', 'passive_filetypes': ['go'] }
let g:syntastic_always_populate_loc_list=1
let g:syntastic_auto_loc_list=1
let g:syntastic_aggregate_errors = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0
let g:syntastic_error_symbol='✗'
let g:syntastic_warning_symbol='⚠'
let g:syntastic_style_error_symbol = '✗'
let g:syntastic_style_warning_symbol = '⚠'
" black
autocmd BufWritePre *.py execute ':Black'
" gitgutter
"set updatetime=100
"=============================
" HotKey Map
"=============================
" vim
let mapleader = ","
nmap YY "+yy<CR>
vmap Y "+y<CR>
nmap P "+p<CR>
vmap P "+p<CR>
nmap <Leader>cd :lcd %:p:h<CR>
cnoreabbrev W! w!
cnoreabbrev Q! q!
cnoreabbrev Qall! qall!
cnoreabbrev Wq wq
cnoreabbrev Wa wa
cnoreabbrev wQ wq
cnoreabbrev WQ wq
cnoreabbrev W w
cnoreabbrev Q q
cnoreabbrev Qall qall
" vim-go settings
map <C-n> :lnext<CR>
map <C-p> :lprevious<CR>
nnoremap <leader>a :lclose<CR>
imap <F12> <C-x><C-o>
" ycm
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
"" NERDTree configuration
nnoremap <F3> :NERDTreeFind<CR>
nnoremap <F4> :NERDTreeToggle<CR>
"" fzf.vim
nmap <Leader>e :FZF<CR>
nmap <Leader>f :Lines<CR>
nmap <Leader>c :Commands<CR>
nmap <Leader>m :Maps<CR>
nmap <Leader>w :Windows<CR>
nmap <Leader>b :Buffers<CR>
" ripgrep
nmap <Leader>F :Rg<CR>
"=============================
" Specail
"=============================
"
" 插入模式為直條線,替代模式為下底線
if &term =~ "xterm"
let &t_SI = "\<Esc>[6 q"
let &t_SR = "\<Esc>[4 q"
let &t_EI = "\<Esc>[2 q"
endif
參考
VimAwesomeLearn Vimscript the Hard Way
Learn Vimscript the Hard Way (中文版)
給程式設計師的Vim入門圖解說明
Vim Bootstrap
Vim 的哲学(三)
30分钟学会vim之vimtutor(双语版).txt
個人化自己的vim文字編輯器(.vimrc設定教學)
vimrc設定教學
















留言
張貼留言