隨處可編輯的編輯器之神VIM

據說這世界上只有三種編輯器:Vim,Emacs 和 其他編輯器,其中 Vim 被稱作編輯器之神,Emacs 被稱作神的編輯器,當然,其他編輯器永遠只能是其他編輯器。

拿一位 網友的話 來說,VIM 的優點就是:快!慘絕人寰的快!模式編輯高度靈活,定製性強,用鍵盤能完成所有的事情,鍵盤黨的最愛,逼格高… … 當然它也有缺點:那就是,懵逼,一直懵逼,全程懵逼(我在哪兒,我在幹什麼,這特么是什麼鬼玩意,我要怎麼退出… …)

事實上,VIM 可以稱得上是「上古神器」了,因為其初始版本的發行早在1991年11月2日(不過現在已經更新到版本8了),而現如今 IDE 編輯器如 VSCode,Sublime Text 等,由於其多樣的功能且容易上手,顯然更受大眾的喜愛和歡迎。

但為什麼在眾多的選擇中,我最後還是入了它的坑呢?

VIM 是許多老式程序員和鍵盤愛好者的最愛(啊,解釋一下,我不是程序猿,最主要我不老(狗頭

VIM 可以完全通過鍵盤進行導航,從而使其更快,更高效。

它也是高度可定製的(在一定程度上可以定製命令行程序)。你可以使用許多鍵盤快捷鍵來加快代碼編輯過程,甚至更好的方法是創建自定義命令以適合你自己的工作流程。

Vim極其穩定,快速,對於資深的命令行愛好者和新的感興趣的用戶都非常有用。

但由於完全缺乏UI,Vim因其最陡峭的學習曲線而獲得大獎,也許是整體上最差的用戶體驗之一。

以上都是網友總結的,當然我也認同。不過對我來說,我選擇 VIM 作為主力編輯器,只是因為之前我在 Windows 本地安裝的 jupyter lab 不能用了(沒找到原因和解決辦法),而 Sublime Text 安裝上打開就一直卡(不知道什麼原因),又不想用 VSCode,因為打開太慢了。考慮到輕便、快捷、不卡頓,並且隨處可編輯,一個鍵盤走天下的特點,我選擇了 VIM。又因為之前在 Linux 編輯大文件也用 VIM,所以乾脆也在 Linux 上重新配置了一遍 VIM。當然 Mac 也不能落單,所以給 Mac 上也重新配置了 VIM。

接下來就是記錄在 Windows,Mac,Linux 三個操作系統上對編輯器之神——VIM 及其插件的安裝和使用過程,也給感興趣的小夥伴一個參考~

Windows VIM 編輯器及其插件安裝

先看一下 Windows VIM 編輯器及其插件安裝完成後的最終效果:

image-20210804110552115

這就是我在 Windows 上的主力編輯器了,接下來就記錄下 Windows VIM 編輯器及其插件的具體安裝過程~

001 下載和安裝 Windows VIM

//www.vim.org/download.php 下載和安裝 gVIM //github.com/vim/vim-win32-installer/releases/download/v8.2.2825/gvim_8.2.2825_x86_signed.exe (我安裝在 D 盤)

002 使用 Vundle 安裝和管理 VIM 插件

##### 01 在 Windows VIM 軟件的安裝路徑下新建文件夾 bundle
D:/Vim/vim82/bundle

##### 02 在 bundle 文件夾下新建文件夾 Vundle.vim
D:/Vim/vim82/bundle/Vundle.vim

##### 03 打開 Git Bash 終端,克隆Vundle倉庫到上述文件夾
git clone //github.com/VundleVim/Vundle.vim.git D:/Vim/vim82/bundle/Vundle.vim

##### 04 打開 Git Bash 終端,編輯 VIM 配置文件 _vimrc
vim D:/Vim/_vimrc
### 向 _vimrc 中添加如下內容(注意:一個雙引號 " 加空格是類似 # 加空格的注釋作用):
set nocompatible
filetype off
set rtp+=D:/Vim/vim82/bundle/Vundle.vim
call vundle#begin('D:/Vim/vim82/bundle/Vundle.vim/plugins')
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'L9'
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'scrooloose/nerdtree'
call vundle#end()
filetype plugin indent on
filetype plugin on

##### 05 以上是實際寫進去的內容,以下是對每一行代碼的解釋:
" 去除VI一致性,必須要添加
set nocompatible
" 必須要添加
filetype off
" 設置包括vundle和初始化相關的runtime path
set rtp+=D:/Vim/vim82/bundle/Vundle.vim
" 指定vundle安裝插件的路徑
call vundle#begin('D:/Vim/vim82/bundle/Vundle.vim/plugins')
" 安裝插件
" 讓vundle管理插件版本,必須首先安裝插件Vundle.vim
Plugin 'VundleVim/Vundle.vim'
" 安裝其他插件
Plugin 'tpope/vim-fugitive'
Plugin 'L9'
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'scrooloose/nerdtree'
" 結束安裝,所有插件安裝必須在下面這行之前進行:
call vundle#end() 
" 加載vim自帶和插件相應的語法和文件類型相關腳本
filetype plugin indent on
" 忽視插件改變縮進,可以使用以下替代
filetype plugin on

003 安裝插件中

修改完 VIM 配置文件 _vimrc 後,打開 Vim(注意不是 gVim),輸入 :PluginInstall ,即開啟插件安裝過程,一個插件安裝可能需要5~10分鐘,此過程需耐心等待。如果安裝不成功,那就一直安裝,因為有些插件來源是 GitHub,而 GitHub 能否成功連接是要看運氣的~

image-20210720163446885

004 安裝完畢

image-20210720153300181

插件安裝成功的前面是 + 號,否則是 !號,可以看到,vim-fugitive 和 nerdtree 插件安裝成功了,但是其他3個沒有安裝成功。

005 NERDTree 插件安裝成功打開 gVim 後的界面

打開 gVim,敲 F7 鍵,即可看到目錄樹:

image-20210720170807362

006 VIM 插件推薦

##### 01 配置vim安裝目錄下面的_vimrc文件
### 打開 Git Bash 終端,編輯 VIM 配置文件 _vimrc
vim D:/Vim/_vimrc
### 添加如下內容
Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'L9'
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'scrooloose/nerdtree'
Plugin 'scrooloose/nerdcommenter'
Plugin 'itchyny/lightline.vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'mechatroner/rainbow_csv'
Plugin 'junegunn/seoul256.vim'
Plugin 'sheerun/vim-polyglot'
Plugin 'airblade/vim-rooter'
Plugin 'ryanoasis/vim-devicons'
Plugin 'tiagofumo/vim-nerdtree-syntax-highlight'
" Plugin 'ryanoasis/nerd-fonts'
Plugin 'konfekt/vim-office'
Plugin 'jiangmiao/auto-pairs'
Plugin 'machakann/vim-sandwich'
Plugin 'tpope/vim-markdown'
Plugin 'mzlogin/vim-markdown-toc'
Plugin 'iamcco/markdown-preview.nvim'
Plugin 'luochen1990/rainbow'
Plugin 'google/vim-searchindex'
Plugin 'datawraith/auto_mkdir'
"Error: E185: Cannot find color scheme for synload.vim (Line 19)
"solution for the above
Plugin 'jpo/vim-railscasts-theme' 
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'Xuyuanp/nerdtree-git-plugin'
Plugin 'haya14busa/incsearch.vim'
Plugin 'anyakichi/vim-surround'



##### 02 啟動vim,執行 :BundleInstall 即可,vundle常用的命令有:
:BundleList:列舉出列表中(.vimrc中)配置的所有插件
:BundleInstall :安裝列表中全部插件
:BundleInstall!:更新列表中全部插件
:BundleSearch xx:查找xx插件
:BundleClean:清除列表中沒有的插件

##### 03 插件配置,比如 NERDTree
### 打開 Git Bash 終端,編輯 VIM 配置文件 _vimrc
vim D:/Vim/_vimrc
### 添加如下內容:

""""""""""""""""""""""""""""""
"scrooloose/nerdtree
""""""""""""""""""""""""""""""
" 添加 F7 為 NERDTree 插件打開和關閉的快捷方式,注意 :NERDTreeToggle<CR> 是一個整體,中間不能有任何空格; <ESC>:NERDTreeToggle<CR> 是一個整體,中間也不能有任何空格;和 <F7> 中間需要有一個空格,表示用 <F7> 快捷鍵代替那2個整體操作
" F7 NERDTree 快捷鍵設置為 F7
map <F7> :NERDTreeToggle<CR>
imap <F7> <ESC>:NERDTreeToggle<CR>
" 修改樹的顯示圖標
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
" 窗口位置
let g:NERDTreeWinPos='left'
" 窗口尺寸
let g:NERDTreeSize=40
" 窗口是否顯示行號
let g:NERDTreeShowLineNumbers=1
" 顯示隱藏文件
let g:NERDTreeHidden=1
" 在 vim 啟動的時候默認開啟 NERDTree(autocmd 可以縮寫為 au)
autocmd VimEnter * NERDTree



""""""""""""""""""""""""""""""
"jiangmiao/auto-pairs
""""""""""""""""""""""""""""""
 let g:AutoPairsFlyMode = 0 "不要啟用飛行模式,因為會無法手動添加右括號 
 let g:AutoPairs = {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
 "let g:AutoPairs['<']='>'
 
 
""""""""""""""""""""""""""""""
"luochen1990/rainbow
""""""""""""""""""""""""""""""
let g:rainbow_active = 1
"let rainbow_parenthesis#active = 0 "避免Rainbow Parentheses插件運行時報錯



""""""""""""""""""""""""""""""
"nerdtree-git-plugin settings
""""""""""""""""""""""""""""""
"let g:NERDTreeShowIgnoredStatus = 1
let g:NERDTreeGitStatusShowIgnored = 1

"let g:NERDTreeIndicatorMapCustom = {
let g:NERDTreeGitStatusIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }


""""""""""""""""""""""""""""""
"airline
""""""""""""""""""""""""""""""
set t_Co=256      "在windows中用xshell連接打開vim可以顯示色彩
let g:airline#extensions#tabline#enabled = 1   " 是否打開tabline
"這個是安裝字體後 必須設置此項" 
let g:airline_powerline_fonts = 1  " 支持 powerline 字體
set laststatus=2  "永遠顯示狀態欄
let g:airline_theme='bubblegum' "選擇主題
let g:airline#extensions#tabline#enabled=1    "Smarter tab line: 顯示窗口tab和buffer
"let g:airline#extensions#tabline#left_sep = ' '  "separater
"let g:airline#extensions#tabline#left_alt_sep = '|'  "separater
"let g:airline#extensions#tabline#formatter = 'default'  "formater
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'


""""""""""""""""""""""""""""""
"vim-nerdtree-syntax-highlight settings
""""""""""""""""""""""""""""""
"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeFileExtensionHighlightFullName = 1
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreePatternMatchHighlightFullName = 1

"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeHighlightFolders = 1

"highlights the folder name
let g:NERDTreeHighlightFoldersFullName = 1

"you can add these colors to your .vimrc to help customizing
let s:brown = "905532"
let s:aqua =  "3AFFDB"
let s:blue = "689FB6"
let s:darkBlue = "44788E"
let s:purple = "834F79"
let s:lightPurple = "834F79"
let s:red = "AE403F"
let s:beige = "F5C06F"
let s:yellow = "F09F17"
let s:orange = "D4843E"
let s:darkOrange = "F16529"
let s:pink = "CB6F6F"
let s:salmon = "EE6E73"
let s:green = "8FAA54"
let s:Turquoise = "40E0D0"
let s:lightGreen = "31B53E"
let s:white = "FFFFFF"
let s:rspec_red = "FE405F"
let s:git_orange = "F54D27"
let s:gray = "808A87"

let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExtensionHighlightColor['o'] = s:gray " sets the color of o files to blue
let g:NERDTreeExtensionHighlightColor['h'] = s:blue " sets the color of h files to blue
let g:NERDTreeExtensionHighlightColor['c'] = s:green " sets the color of c files to blue
let g:NERDTreeExtensionHighlightColor['cpp'] = s:green " sets the color of cpp files to blue
let g:NERDTreeExtensionHighlightColor['c++'] = s:green " sets the color of c++ files to blue


""""""""""""""""""""""""""""""
"vim-devicons settings
""""""""""""""""""""""""""""""`
set encoding=UTF-8

"Can be enabled or disabled
let g:webdevicons_enable_nerdtree = 1

"whether or not to show the nerdtree brackets around flags
let g:webdevicons_conceal_nerdtree_brackets = 1

"adding to vim-airline's tabline
let g:webdevicons_enable_airline_tabline = 1

"adding to vim-airline's statusline
let g:webdevicons_enable_airline_statusline = 1


""""""""""""""""""""""""""""""
"altercation/vim-colors-solarized 配色方案選擇
""""""""""""""""""""""""""""""`
syntax enable
set background=dark
set t_Co=256
colorscheme railscasts


""""""""""""""""""""""""""""""
"scrooloose/nerdcommenter
""""""""""""""""""""""""""""""`
let g:NERDSpaceDelims = 1 " 在注釋符號後加一個空格
let g:NERDCompactSexyComs = 1 " 緊湊排布多行注釋
let g:NERDDefaultAlign = 'left' " 逐行注釋左對齊
let g:NERDAltDelims_java = 1 " JAVA 語言使用默認的注釋符號
let g:NERDCustomDelimiters = {'c': {'left': '/*', 'right': '*/'}} " C 語言注釋符號
let g:NERDCommentEmptyLines = 1 " 允許空行注釋
let g:NERDTrimTrailingWhitespace = 1 " 取消注釋時刪除行尾空格
let g:NERDToggleCheckAllLines = 1 " 檢查選中的行操作是否成功

007 常見問題及解決辦法

Q:在安裝完上述插件後,打開 Windows Vim / gVim 後,原來的中文菜單出現亂碼

A:在中文 Windows 下正確配置字符編碼,需要把以下內容加入你的配置文件 _vimrc 中

##### 01 打開 Git Bash 終端,編輯 VIM 配置文件 _vimrc
vim D:/Vim/_vimrc
### 向 _vimrc 中添加如下內容
set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
set encoding=utf-8
set termencoding=cp936
language messages zh_CN.UTF-8 
# 特別提醒,以上代碼應該放在 .vimrc 的最頂端,因為 vim 運行過程中 set encoding=xxx 是很危險的,會導致各種亂碼。

008 Vundle 卸載插件

如果要刪除某個插件,也是要先編輯 ~/.vimrc文件,刪除或注釋裏面Plugin定義的插件,再打開vim,運行 :PluginClean 命令,會提示你是否要刪除XX插件,選擇YES就可以刪除了。

009 VIM 更換字體

我選擇的是ubuntu下的字體,於是從 //www.fonts2u.com/ubuntu-mono.font 下載了ubuntu mono字體,右鍵本地電腦安裝,在 VIM ~/.vimrc 配置文件非開頭處加入set guifont=Ubuntu\ Mono\ Bold:h12 ,即可。

010 文件顯示行號

在 VIM ~/.vimrc 配置文件中加入set number ,即可。

011 對文件的基本操作

##### 只需打開 gVim,輸入以下命令
### 進入特定工作目錄
:NERDTree D:/GitHubDesktop //進入此目錄
### 同時顯示多個文件
:sp         //水平切分窗口
:vsplit     //垂直切分窗口
### 關閉分屏
:hide   //關閉當前分屏
:only   //僅保留當前分屏
ctrl+W c   //關閉當前窗口
ctrl+w q   //關閉當前窗口,若只有一個分屏會退出vim
### 跳轉到指定行
:n (跳轉到文件第n行,需要回車)
### 以標籤欄的形式打開多個文件
# 同時以多標籤形式打開file1 file2等文件
vim -p file1.c file2.c  ..
# 彈出各個文件後,你可以像瀏覽器標籤欄一樣鼠標點擊打開每個文件;對於用 -p 打開的標籤頁,可以使用 gt,gT可以左切換右切換,也可以使用數字1,2,n,+gt,例如你想切換到第5個標籤頁,就可以使用 5gt,意思是按下5,g,t鍵就可以了
# 已經啟動vim後,還可以在vim的命令模式下面繼續用新標籤打開文件:
:tabnew file3.c
# 關閉標籤頁
:tabc 關閉當前標籤頁
:tabo 關閉所有的標籤頁

012 Win10中gVIM與外部/系統的複製剪切粘貼互通

##### 001 打開 Git Bash 終端,編輯 gVIM 配置文件 _vimrc
vim D:/Vim/_vimrc
### 向 _vimrc 中添加如下內容:
vmap <C-c> "+y
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+
##### 002 gvim 中操作
複製:鼠標選中某段文本進入可視塊,然後ctrl+c;
粘貼:gvim 內進入插入模式後ctrl+v,外部直接ctrl+v;
搜索:如果要在gvim中搜索剪貼板內容,先按「/」然後點鼠標中鍵,筆記本中鍵要在 設置-設備-觸摸板-其他設置-高級設置里例如將3指點擊設置為中鍵(win10下)
剪切:ctrl+x

013 VIM 開啟鼠標功能

##### 001 編輯 VIM 配置文件 _vimrc
vim D:/Vim/_vimrc
### 向 _vimrc 中添加如下內容:
set mouse=a

014 遺留問題

VIM插件不起作用: Vim-devicons: 圖標都是相同的問號

015 參考資料

Mac VIM 編輯器及其插件安裝

001 Install vim and macvim

brew install vim
brew unlink vim
brew install macvim

Q & A

Q1: Error: The following directories are not writable by your user:
/usr/local/include
/usr/local/lib
/usr/local/lib/pkgconfig
A1: 獲取usr/local文件夾的寫入權限

sudo chown -R $(whoami) /usr/local/*

Q2: Error: [email protected]: wrong number of arguments (given 1, expected 0)
A2: 安裝 cmake,如果安裝不成功,那就一直安裝

brew install cmake

特別提醒:Mac本身是內置了 VIM 編輯器的,但是為了避免由於修改 Mac 內置編輯器導致一些不可控的問題出現,建議像我一樣,在自己的用戶下重新裝一個 VIM。

002 Install ctags & cscope

brew install ctagsbrew install cscope

003 Find the location of installed vim

which vim# /usr/local/bin/vim

Q & A

Q: if not /usr/local/bin/vim, we should edit the file /etc/paths to change the orderA: 修改環境變量: 修改變量加載順序。環境變量哪個寫在前面哪個優先使用。sudo vim /etc/paths# 修改後的順序如下:/usr/local/bin/usr/bin/bin/usr/sbin/sbin# 重新開啟命令行,測試 which vim, 成功。

004 Install bundle

git clone //github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

005 Configure ~/.vimrc

vim ~/.vimrc

# add the following contents:

"set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
"set encoding=utf-8
"set termencoding=cp936
"language messages zh_CN.UTF-8 

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin('/Users/xia/.vim/bundle/Vundle.vim/plugins')

Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'L9'
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'scrooloose/nerdtree'
Plugin 'scrooloose/nerdcommenter'
Plugin 'itchyny/lightline.vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'mechatroner/rainbow_csv'
Plugin 'junegunn/seoul256.vim'
Plugin 'sheerun/vim-polyglot'
Plugin 'airblade/vim-rooter'
Plugin 'ryanoasis/vim-devicons'
Plugin 'tiagofumo/vim-nerdtree-syntax-highlight'
Plugin 'konfekt/vim-office'
Plugin 'jiangmiao/auto-pairs'
Plugin 'machakann/vim-sandwich'
Plugin 'tpope/vim-markdown'
Plugin 'mzlogin/vim-markdown-toc'
Plugin 'iamcco/markdown-preview.nvim'
Plugin 'luochen1990/rainbow'
Plugin 'google/vim-searchindex'
Plugin 'datawraith/auto_mkdir'
"Error: E185: Cannot find color scheme for synload.vim (Line 19)
"solution for the above
Plugin 'jpo/vim-railscasts-theme' 
Plugin 'haya14busa/incsearch.vim'

call vundle#end()
filetype plugin indent on
filetype plugin on



""""""""""""""""""""""""""""""
"scrooloose/nerdtree
""""""""""""""""""""""""""""""
" 添加 F7 為 NERDTree 插件打開和關閉的快捷方式,注意 :NERDTreeToggle<CR> 是一個整體,中間不能有任何空格; <ESC>:NERDTreeToggle<CR> 是一個整體,中間也不能有任何空格;和 <F7> 中間需要有一個空格,表示用 <F7> 快捷鍵代替那2個整體操作
" F7 NERDTree 快捷鍵設置為 F7
map <F7> :NERDTreeToggle<CR>
imap <F7> <ESC>:NERDTreeToggle<CR>
" 修改樹的顯示圖標
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
" 窗口位置
let g:NERDTreeWinPos='left'
" 窗口尺寸
let g:NERDTreeSize=40
" 窗口是否顯示行號
let g:NERDTreeShowLineNumbers=1
" 顯示隱藏文件
let g:NERDTreeHidden=1
" 在 vim 啟動的時候默認開啟 NERDTree(autocmd 可以縮寫為 au)
autocmd VimEnter * NERDTree



""""""""""""""""""""""""""""""
"jiangmiao/auto-pairs
""""""""""""""""""""""""""""""
 let g:AutoPairsFlyMode = 1 
 let g:AutoPairs = {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
 "let g:AutoPairs['<']='>'

""""""""""""""""""""""""""""""
"luochen1990/rainbow
""""""""""""""""""""""""""""""
let g:rainbow_active = 1
"let rainbow_parenthesis#active = 0 "避免Rainbow Parentheses插件運行時報錯



""""""""""""""""""""""""""""""
"nerdtree-git-plugin settings
""""""""""""""""""""""""""""""
let g:NERDTreeShowIgnoredStatus = 1

let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }



""""""""""""""""""""""""""""""
"vim-nerdtree-syntax-highlight settings
""""""""""""""""""""""""""""""
"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeFileExtensionHighlightFullName = 1
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreePatternMatchHighlightFullName = 1

"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeHighlightFolders = 1

"highlights the folder name
let g:NERDTreeHighlightFoldersFullName = 1

"you can add these colors to your .vimrc to help customizing
let s:brown = "905532"
let s:aqua =  "3AFFDB"
let s:blue = "689FB6"
let s:darkBlue = "44788E"
let s:purple = "834F79"
let s:lightPurple = "834F79"
let s:red = "AE403F"
let s:beige = "F5C06F"
let s:yellow = "F09F17"
let s:orange = "D4843E"
let s:darkOrange = "F16529"
let s:pink = "CB6F6F"
let s:salmon = "EE6E73"
let s:green = "8FAA54"
let s:Turquoise = "40E0D0"
let s:lightGreen = "31B53E"
let s:white = "FFFFFF"
let s:rspec_red = "FE405F"
let s:git_orange = "F54D27"
let s:gray = "808A87"

let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExtensionHighlightColor['o'] = s:gray " sets the color of o files to blue
let g:NERDTreeExtensionHighlightColor['h'] = s:blue " sets the color of h files to blue
let g:NERDTreeExtensionHighlightColor['c'] = s:green " sets the color of c files to blue
let g:NERDTreeExtensionHighlightColor['cpp'] = s:green " sets the color of cpp files to blue
let g:NERDTreeExtensionHighlightColor['c++'] = s:green " sets the color of c++ files to blue

""""""""""""""""""""""""""""""
"vim-devicons settings
""""""""""""""""""""""""""""""`
set encoding=UTF-8

"Can be enabled or disabled
let g:webdevicons_enable_nerdtree = 1

"whether or not to show the nerdtree brackets around flags
let g:webdevicons_conceal_nerdtree_brackets = 1

"adding to vim-airline's tabline
let g:webdevicons_enable_airline_tabline = 1

"adding to vim-airline's statusline
let g:webdevicons_enable_airline_statusline = 1



""""""""""""""""""""""""""""""
"altercation/vim-colors-solarized 配色方案選擇
""""""""""""""""""""""""""""""`
syntax enable
set background=dark
set t_Co=256
colorscheme railscasts

""""""""""""""""""""""""""""""
"scrooloose/nerdcommenter
""""""""""""""""""""""""""""""`
let g:NERDSpaceDelims = 1 " 在注釋符號後加一個空格
let g:NERDCompactSexyComs = 1 " 緊湊排布多行注釋
let g:NERDDefaultAlign = 'left' " 逐行注釋左對齊
let g:NERDAltDelims_java = 1 " JAVA 語言使用默認的注釋符號
let g:NERDCustomDelimiters = {'c': {'left': '/', 'right': '/'}} " C 語言注釋符號
let g:NERDCommentEmptyLines = 1 " 允許空行注釋
let g:NERDTrimTrailingWhitespace = 1 " 取消注釋時刪除行尾空格
let g:NERDToggleCheckAllLines = 1 " 檢查選中的行操作是否成功

set guifont=Ubuntu\ Mono\ Bold:h12
set number

vmap <C-c> "+y
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

006 Install vim plugins

Mac 終端輸入 vim , 進入 VIM 後,輸入 :PluginInstall 完成第一次初始化安裝。如果安裝不成功,那就一直安裝,因為有些插件來源是 GitHub,而 GitHub 能否成功連接是要看運氣的。

007 References

Linux VIM 編輯器及其插件安裝

先看一下 Linux VIM 編輯器及其插件安裝完成後的最終效果:

image-20210804105612357

自我感覺還可以,接下來就看 Linux VIM 編輯器及其插件的具體安裝過程吧~

001 下載 VIM

ftp://ftp.vim.org/pub/vim/unix 下載 vim,最新版本為 vim-8.2.tar.bz2

002 解壓 VIM

cd ~/Softwarestar -jxvf vim-8.2.tar.bz2

003 配置和安裝 VIM

./configure --prefix=/zs32/home/chxia/opt/vim82makemake install

004 編輯用戶目錄下的 .bashrc文件

vi ~/.bashrc# 在文件內容最後添加一行:alias vim='/zs32/home/chxia/opt/vim82/bin/vim'# 使上述配置生效source ~/.bashrc

005 Install bundle

##### 01 從 //github.com/VundleVim/Vundle.vim 下載 Vundle.vim-master.zip##### 02 解壓 Vundle.vim-master.zip##### 03 新建文件夾 bundle/Vundle.vimmkdir ~/.vim/bundle/Vundle.vim##### 04 將解壓後的 Vundle.vim-master 里的文件上傳到 ~/.vim/bundle/Vundle.vim

006 新建 vim 用戶配置文件並編輯

vim ~/.vimrc

# add the following contents:

"正常使用鼠標右鍵來進行複製粘貼操作
source /zs32/home/chxia/opt/vim82/share/vim/vim82/defaults.vim
let skip_defaults_vim = 1
if has('mouse')
    set mouse-=a
endif

"set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1
"set encoding=utf-8
"set termencoding=cp936
"language messages zh_CN.UTF-8 

set nocompatible
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin('~/.vim/bundle/Vundle.vim/plugins')

Plugin 'VundleVim/Vundle.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'L9'
Plugin 'git://git.wincent.com/command-t.git'
Plugin 'scrooloose/nerdtree'
Plugin 'scrooloose/nerdcommenter'
Plugin 'itchyny/lightline.vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'mechatroner/rainbow_csv'
Plugin 'junegunn/seoul256.vim'
Plugin 'sheerun/vim-polyglot'
Plugin 'airblade/vim-rooter'
Plugin 'ryanoasis/vim-devicons'
Plugin 'tiagofumo/vim-nerdtree-syntax-highlight'
Plugin 'konfekt/vim-office'
Plugin 'jiangmiao/auto-pairs'
Plugin 'machakann/vim-sandwich'
Plugin 'tpope/vim-markdown'
Plugin 'mzlogin/vim-markdown-toc'
Plugin 'iamcco/markdown-preview.nvim'
Plugin 'luochen1990/rainbow'
Plugin 'google/vim-searchindex'
Plugin 'datawraith/auto_mkdir'
"Error: E185: Cannot find color scheme for synload.vim (Line 19)
"solution for the above
Plugin 'jpo/vim-railscasts-theme'  

call vundle#end()
filetype plugin indent on
filetype plugin on



""""""""""""""""""""""""""""""
"scrooloose/nerdtree
""""""""""""""""""""""""""""""
" 添加 F7 為 NERDTree 插件打開和關閉的快捷方式,注意 :NERDTreeToggle<CR> 是一個整體,中間不能有任何空格; <ESC>:NERDTreeToggle<CR> 是一個整體,中間也不能有任何空格;和 <F7> 中間需要有一個空格,表示用 <F7> 快捷鍵代替那2個整體操作
" F7 NERDTree 快捷鍵設置為 F7
map <F7> :NERDTreeToggle<CR>
imap <F7> <ESC>:NERDTreeToggle<CR>
" 修改樹的顯示圖標
let g:NERDTreeDirArrowExpandable = '+'
let g:NERDTreeDirArrowCollapsible = '-'
" 窗口位置
let g:NERDTreeWinPos='left'
" 窗口尺寸
let g:NERDTreeSize=40
" 窗口是否顯示行號
let g:NERDTreeShowLineNumbers=1
" 顯示隱藏文件
let g:NERDTreeHidden=1
" 在 vim 啟動的時候默認開啟 NERDTree(autocmd 可以縮寫為 au)
autocmd VimEnter * NERDTree



""""""""""""""""""""""""""""""
"jiangmiao/auto-pairs
""""""""""""""""""""""""""""""
 let g:AutoPairsFlyMode = 1 
 let g:AutoPairs = {'(':')', '[':']', '{':'}',"'":"'",'"':'"'}
 "let g:AutoPairs['<']='>'

""""""""""""""""""""""""""""""
"luochen1990/rainbow
""""""""""""""""""""""""""""""
let g:rainbow_active = 1
"let rainbow_parenthesis#active = 0 "避免Rainbow Parentheses插件運行時報錯



""""""""""""""""""""""""""""""
"nerdtree-git-plugin settings
""""""""""""""""""""""""""""""
let g:NERDTreeShowIgnoredStatus = 1

let g:NERDTreeIndicatorMapCustom = {
    \ "Modified"  : "✹",
    \ "Staged"    : "✚",
    \ "Untracked" : "✭",
    \ "Renamed"   : "➜",
    \ "Unmerged"  : "═",
    \ "Deleted"   : "✖",
    \ "Dirty"     : "✗",
    \ "Clean"     : "✔︎",
    \ 'Ignored'   : '☒',
    \ "Unknown"   : "?"
    \ }



""""""""""""""""""""""""""""""
"vim-nerdtree-syntax-highlight settings
""""""""""""""""""""""""""""""
"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeFileExtensionHighlightFullName = 1
let g:NERDTreeExactMatchHighlightFullName = 1
let g:NERDTreePatternMatchHighlightFullName = 1

"Highlight full name (not only icons). You need to add this if you don't have vim-devicons and want highlight.
let g:NERDTreeHighlightFolders = 1

"highlights the folder name
let g:NERDTreeHighlightFoldersFullName = 1

"you can add these colors to your .vimrc to help customizing
let s:brown = "905532"
let s:aqua =  "3AFFDB"
let s:blue = "689FB6"
let s:darkBlue = "44788E"
let s:purple = "834F79"
let s:lightPurple = "834F79"
let s:red = "AE403F"
let s:beige = "F5C06F"
let s:yellow = "F09F17"
let s:orange = "D4843E"
let s:darkOrange = "F16529"
let s:pink = "CB6F6F"
let s:salmon = "EE6E73"
let s:green = "8FAA54"
let s:Turquoise = "40E0D0"
let s:lightGreen = "31B53E"
let s:white = "FFFFFF"
let s:rspec_red = "FE405F"
let s:git_orange = "F54D27"
let s:gray = "808A87"

let g:NERDTreeExtensionHighlightColor = {} " this line is needed to avoid error
let g:NERDTreeExtensionHighlightColor['o'] = s:gray " sets the color of o files to blue
let g:NERDTreeExtensionHighlightColor['h'] = s:blue " sets the color of h files to blue
let g:NERDTreeExtensionHighlightColor['c'] = s:green " sets the color of c files to blue
let g:NERDTreeExtensionHighlightColor['cpp'] = s:green " sets the color of cpp files to blue
let g:NERDTreeExtensionHighlightColor['c++'] = s:green " sets the color of c++ files to blue

""""""""""""""""""""""""""""""
"vim-devicons settings
""""""""""""""""""""""""""""""`
set encoding=UTF-8

"Can be enabled or disabled
let g:webdevicons_enable_nerdtree = 1

"whether or not to show the nerdtree brackets around flags
let g:webdevicons_conceal_nerdtree_brackets = 1

"adding to vim-airline's tabline
let g:webdevicons_enable_airline_tabline = 1

"adding to vim-airline's statusline
let g:webdevicons_enable_airline_statusline = 1


""""""""""""""""""""""""""""""
"altercation/vim-colors-solarized 配色方案選擇
""""""""""""""""""""""""""""""`
syntax enable
set background=dark
set t_Co=256
colorscheme railscasts

""""""""""""""""""""""""""""""
"scrooloose/nerdcommenter
""""""""""""""""""""""""""""""`
let g:NERDSpaceDelims = 1 " 在注釋符號後加一個空格
let g:NERDCompactSexyComs = 1 " 緊湊排布多行注釋
let g:NERDDefaultAlign = 'left' " 逐行注釋左對齊
let g:NERDAltDelims_java = 1 " JAVA 語言使用默認的注釋符號
let g:NERDCustomDelimiters = {'c': {'left': '/', 'right': '/'}} " C 語言注釋符號
let g:NERDCommentEmptyLines = 1 " 允許空行注釋
let g:NERDTrimTrailingWhitespace = 1 " 取消注釋時刪除行尾空格
let g:NERDToggleCheckAllLines = 1 " 檢查選中的行操作是否成功

set guifont=Ubuntu\ Mono\ Bold:h12
set number

vmap <C-c> "+y
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

007 VIM 插件安裝

Linux終端輸入 vim 運行 vim,輸入 :PluginInstall 完成第一次初始化安裝。如果安裝不成功,那就一直安裝,因為有些插件來源是 GitHub,而 GitHub 能否成功連接是要看運氣的。

008 遇到的問題

Q:因為 Linux 服務器不能KX上網,導致很多來自 GitHub 的 VIM 插件一直無法安裝成功。

A:換成 Plug 插件管理器,並更改 Plug 插件的源碼,將 GitHub 網址更改為 GitHub 鏡像網址。類比此方法,其實也可更改 Vundle 插件管理器的源碼,只不過自己暫時沒有教程,不敢隨便動它的源碼。

##### 01 首先找到可用的GitHub鏡像網站,這裡我找到的是 //github.com.cnpmjs.org

##### 02 安裝vim-plug插件管理器

### (1) 在 .vim 文件夾下新建一個文件夾 autoload
mkdir ~/.vim/autoload/

### (2) 從 //github.com/junegunn/vim-plug 下載 plug.vim 文件(//raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim)(這裡實際是自己先創建一個空文件 plug.vim,再把內容添加進去) 

### (3) 修改 plug.vim 文件中的兩行:
let fmt = get(g:, 'plug_url_format', '//git::@github.com/%s.git')
修改為
let fmt = get(g:, 'plug_url_format', '//git::@github.com.cnpmjs.org/%s.git')

\ '^//git::@github.com', '//github.com', '')
修改為
\ '^//git::@github.com.cnpmjs.org', '//github.com.cnpmjs.org', '')

### (4) 將修改後的 plug.vim 文件上傳到 ~/.vim/autoload/ 目錄即可完成安裝

##### 03 使用vim-plug插件管理器安裝插件

### (1) 在 .vim 文件夾下新建一個文件夾 plugged,以後使用vim-plug插件管理器安裝的插件都會保存在這個文件夾下
mkdir ~/.vim/plugged/

### (2) 添加 vim-plug 的配置到 ~/.vimrc 中(和Vundle插件管理器類似)
# 向 ~/.vimrc 添加如下內容:

call plug#begin('~/.vim/plugged')
"插件列表,以 Plug 命令開頭
Plug 'junegunn/vim-easy-align'
"Plug 'VundleVim/Vundle.vim'
Plug 'tpope/vim-fugitive'
Plug 'user/L9'
Plug 'git://git.wincent.com/command-t.git'
Plug 'scrooloose/nerdtree'
Plug 'scrooloose/nerdcommenter'
Plug 'itchyny/lightline.vim'
Plug 'altercation/vim-colors-solarized'
Plug 'mechatroner/rainbow_csv'
Plug 'junegunn/seoul256.vim'
Plug 'sheerun/vim-polyglot'
Plug 'airblade/vim-rooter'
Plug 'ryanoasis/vim-devicons'
Plug 'tiagofumo/vim-nerdtree-syntax-highlight'
Plug 'konfekt/vim-office'
Plug 'jiangmiao/auto-pairs'
Plug 'machakann/vim-sandwich'
Plug 'tpope/vim-markdown'
Plug 'mzlogin/vim-markdown-toc'
Plug 'iamcco/markdown-preview.nvim'
Plug 'luochen1990/rainbow'
Plug 'google/vim-searchindex'
Plug 'datawraith/auto_mkdir'
Plug 'jpo/vim-railscasts-theme' 
Plug 'gko/vim-coloresque'
Plug 'vim-airline/vim-airline'
Plug 'vim-airline/vim-airline-themes'
Plug 'Xuyuanp/nerdtree-git-plugin'
Plug 'haya14busa/incsearch.vim'
call plug#end()


""""""""""""""""""""""""""""""
"airline
""""""""""""""""""""""""""""""
set t_Co=256      "在windows中用xshell連接打開vim可以顯示色彩
let g:airline#extensions#tabline#enabled = 1   " 是否打開tabline
"這個是安裝字體後 必須設置此項" 
let g:airline_powerline_fonts = 1  " 支持 powerline 字體
set laststatus=2  "永遠顯示狀態欄
let g:airline_theme='bubblegum' "選擇主題
let g:airline#extensions#tabline#enabled=1    "Smarter tab line: 顯示窗口tab和buffer
"let g:airline#extensions#tabline#left_sep = ' '  "separater
"let g:airline#extensions#tabline#left_alt_sep = '|'  "separater
"let g:airline#extensions#tabline#formatter = 'default'  "formater
let g:airline_left_sep = '▶'
let g:airline_left_alt_sep = '❯'
let g:airline_right_sep = '◀'
let g:airline_right_alt_sep = '❮'

009 參考資料

本文章首發於個人微信公眾號 TouchUMind,個人嗶哩嗶哩賬號 iTouchUMind,博客園賬號 TouchUMind,科學網(博客)賬號 TouchUMind,備份(終稿)於個人博客網站 touchumind.com,歡迎關注和支持!

Tags: