--- title: 'Vim 使用 & Vim IDE' disqus: kyleAlien --- Vim 使用 & Vim IDE === ## OverView of Content 以下使用 Vim 8,簡單介紹一下它有的特性 1. 異步 I/O 操作,支持通道 Channel 2. 多任務 3. 定時器 4. 對 GTK + 3 支持 [TOC] ## Ubuntu 安裝 Vim * 使用 Ubuntu 命令行安裝 Vim ```shell= sudo apt install vim ``` >  ## Vim 3 種工作模式 Vim 編譯器有 3 種工作模式,^1^ Command Mode、^2^ Insert Mode、^3^ Last line mode ### Command Mode * 當用戶使用 vim 來編譯文件時就會先進入 **Command Mode** >  ### Insert Mode * 透過關鍵字 `i` 就可以從 Command Mode 轉換到 Insert Mode (等等會介紹關其他鍵字) >  ### Last Line Mode * 可以透過關鍵字 `:` 從 Command Mode 轉換到 Last Line Mode,在該模式下可以輸入包含單個 or 多個字符指令 >  ### Vim 模式切換 1. Command Mode => Insert Mode,輸入以下關鍵字就可以進入插入模式 | 功能 | 輸入字元 | 說明 | | -------- | -------- | -------- | | 插入字符 | i | 在箭頭 (鼠標、光標...) 所在位子輸入字符 | | 插入字符 | I | 在箭頭 (鼠標、光標...) 所在位子中第一個非 "空白" 處開始輸入 | | 插入字符 | a | 在箭頭 (鼠標、光標...) 所在位子的下一個地方開始輸入。記 **append** | | 插入字符 | A | 在箭頭 (鼠標、光標...) 所在位子的行數尾端開始輸入。記 **。記 append** | | 新增一行 | o | 在箭頭 (鼠標、光標...) 所在位子的行數 "後" 插入一行 | | 新增一行 | O | 在箭頭 (鼠標、光標...) 所在位子的行數 "前" 插入一行 | >  2. Insert Mode => Command Mode 按 `Ese` 就可以退出插入模式,進入到命令模式 3. Command Mode => Last Line Mode 輸入 `:` 就可以進入 Last Line Mode >  ### 命令模式 - 光標移動 * **在 ++命令模式下++ Vim 編輯器放棄鍵盤上的分向鍵**,使用關鍵字來實現方向移動 (熟悉後鍵盤關鍵字後,速度相對快一點) | 命令 | 說明 | | -------- | -------- | | h | 左 | | j | 下 | | k | 上 | | l | 又 | * 常見光標移動命令 >  | 命令 | 說明 | | -------- | -------- | | w | 移動到下個單字的頭 (Hello 移動到 World) | | b | 若光標在 Hello 的中間,則會移動到 Hello 的開頭 (也就是 H) | | f{char} | 找尋 {char} 字符所在 (**這好像會跟進插入模式的關鍵字衝突 ?**) | | Ctrl + f | 功能類似 Page Down (記憶 front) | | Ctrl + b | 功能類似 Page Up (記憶 back) | | Ctrl + d | 向下移動半頁 | | Ctrl + u | 向上移動半頁 | | $ | 移動到該行的最尾端 | | 0 | 數字 0,移動到該行的開頭 | | H | 移動該螢幕最 "上方" 的那行的第一個字符 | | L | 移動到螢幕最 "下方" 的那行的第一個字符 | | G | 移動到文件的最後一行 | | gg | 移動到文件的第一航 | | nG | n 代表要移動到文件的第 n 行(**指定**) | | nEnter | 光標往下移動 n 行 | ### 命令模式 - Copy、Paste、Delete * **在 ++命令模式下++ 可以做到 Copy、Paste、Delete 操作** | 命令 | 說明 | | -------- | -------- | | x | 刪除當前光標所在位子的字符 | | X | 類似於 BackSpace (刪除光標前一個字符) | | dd | 刪除該行 | | ndd | 刪除光標所在底下的 n 行 | | yy | 複製該行 | | nyy | 複製光標所在底下的 n 行 | | p | 把複製的數據貼到光標的下一行 | | u | 撤銷前一個命令 | ### 命令模式 - 查找 * **在 ++命令模式下++ 可以做到查找你要的字元功能** | 命令 | 說明 | | -------- | -------- | | /<查找的字元> | 往下尋找 | | ?<查找的字元> | 往上尋找 | | :{作用範圍}s/{目標}/{替換}/{替換標誌} | 看下面範例 | * 輸入 %s/alien/Ubuntu/g,用來搜尋全域範圍的 alien,並替換成 Ubtuntu 1. 輸入前  2. 輸入後結果  ### 底行模式 - 文件操作 * 文件操作要在 **++底行模式下++** (**輸入 `:`**) | 命令 | 說明 | | -------- | -------- | | q | 退出 | | q! | 強退出,並不保留 | | w | 寫入 | | w! | 強制寫入 | | wq | 寫入並離開 | | wq! | 強制寫入並離開 | | x | 同 wq | | x! | 同 wq! | ## 使用 Vim 打造 IDE * 前提: 先安裝 Vim & Git ```shell= sudo apt install git vim ``` ### Vim 插件管理工具 - [Vundle](https://github.com/VundleVim/Vundle.vim) * Vim 支持許多的插件,以前需要到插件網站下載 & 複製到 home 目錄下的 .vim 子目錄才可以使用。 * **[Vundle](https://github.com/VundleVim/Vundle.vim) 是一個插件管理工具 (單然管理工具還有很多),它可以在 .vimrc 中跟蹤、管理、自動更新插件** 1. 首先透過 git clone 該專案 ```shell= # clone # 目標路徑為 ~/.vim/bundle/Vundle.vim git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim ``` >  2. User 目錄下建造 `.vimrc` 文件 ```shell= cd ~ # 創建 .vimrc 文件 touch .vimrc ``` 3. 配置 `.vimrc` 文件 (參考 GitHub 範例) ```shell= # 開始編輯 vim .vimrc ``` ```cmake= set nocompatible " be iMproved, required set nu! " show line number syntax enable syntax on colorscheme desert filetype off " required " set the runtime path to include Vundle and initialize set rtp+=~/.vim/bundle/Vundle.vim call vundle#begin() "Plugin 'VundleVim/Vundle.vim' Plugin 'gmarik/Vundle.vim' Plugin 'majutsushi/tagbar' Plugin 'scrooloose/nerdtree' Plugin 'w0rp/ale' Plugin 'Valloric/YouCompleteMe' Plugin 'ludovicchabant/vim-gutentags' call vundle#end() " required filetype plugin indent on " required ``` 4. 開啟 vim,在底行模式下輸入 `PluginInstall` >  ### ctags 工具 * ctags 是 generate tag files for source code,**ctags 工具用於掃描指定 source code,並找出其中包含的語法元素,並將其記錄下來**,方便之後尋找 1. 透過 Apt 安裝 `universal-ctags` ```shell= sudo apt install universal-ctags ``` >  2. 手動生成引所文件 (建立 tags 需要一點時間) ```shell= # 移動到之前下載 Linux kernel 的地方 cd ~/Downloads/linux-5.14.13 # 建立 tags ctags -R . ``` 3. 開啟 vim 並加載 tags ```shell= :set tags=tags ``` ### cscope 工具 1. 透過 Apt 安裝 `cscope` ```shell= sudo apt install cscope ``` >  2. 生成員代碼引索庫 ```shell= cscope -Rbq ``` >  ### Tagbar 插件 * Tagbar 插件可以替 Source code 生成大綱,包括 類、方法、變量 & 函數名等等,可以選重病快速跳轉到目標位置 1. 在 `.vimrc` 中設定安裝 Tagbar 插件 ```shell= Plugin 'majutsushi/tagbar' ``` 2. 進入 Vim 底行模式,輸入 `:PluginInstall` 3. 為了配置 Tagbar 插件,可在 `.vimrc` 文件中添加以下內容 ```cmake= " Tagbar setting let g:tagbar_width=25 autocmd BufReadPost *.cpp,*.c,*.h,*.cc,*.cxx call tagbar#autoopen() ``` ### NerdTree 插件 * NerdTree 插件用於顯示樹狀目錄 1. 在 `.vimrc` 中設定安裝 NerdTree 插件 ```shell= Plugin 'scrooloose/nerdtree' ``` 2. 進入 Vim 底行模式,輸入 `:PluginInstall` 3. 為了配置 NerdTree 插件,可在 `.vimrc` 文件中添加以下內容 ```cmake= " NerdTree setting autocmd StdinReadPre * let:std_in=1 autocmd VimEnter * if argc() == 0 && !exists("s:std_in") | NERDTree | endif let NERDTreeWinSize=15 let NERDTreeShowLineNumbers=1 let NERDTreeAutoCenter=1 let NERDTreeShowBookmarks=1 ``` ### ale 動態語法檢查 - 插件 * 在 Coding 的時候就自動幫我們檢查與法是否正確 (不必等到編譯期間檢查) 1. 在 `.vimrc` 中設定安裝 動態語法檢查 插件 ```shell= Plugin 'w0rp/ale' ``` 2. 進入 Vim 底行模式,輸入 `:PluginInstall` 3. 為了配置 NerdTree 插件,可在 `.vimrc` 文件中添加以下內容 ```cmake= " ale setting let g:ale_sign_column_alway=1 let g:ale_sign_error=1 let g:ale_sign_warning='w' let g:ale_statusline_formate=[' %d',' %d',' OK'] let g:ale_echo_msg_format='[%linter%] %code: %%s' let g:ale_lint_on_text_changed='normal' let g:ale_lint_on_insert_leave=1 let g:ale_c_gcc_options='-Wall -O2 -std=c99' let g:ale_cpp_gcc_options='-Wall -O2 -std=c++14' let g:ale_c_cppcheck_options='' let g:ale_cpp_cppcheck_options='' ``` >  ### 自動補齊 - YouCompleteMe * **YouCompleteMe 也是 Vim Plgin 的工具之一**,它可以幫助我們補齊不足的程式 (就像提示) :::warning * Vim 的版本最低要使用 7.4.1578 ```shell= # 查詢 Vim 版本資訊 vim --version ``` >  ::: 1. 在 `.vimrc` 中設定安裝 YouCompleteMe 插件 ```shell= # .vimrc 檔 Plugin 'Valloric/YouCompleteMe' ``` 2. 進入 Vim 底行模式,輸入 `:PluginInstall` 3. 透過 apt 安裝 Pythone3、cmake、build-essential ```shell= sudo apt install build-essential cmake python3-dev ``` :::info * 若有多個 python (你可能之前安裝過 python2,但現在要求要使用 python3),可以透過 `update-alternatives` 來選擇要使用的 python ```shell= sudo update-alternatives --config python ``` ::: 4. 切換到 .vim 目錄下的 `bundle/YouCompleteMe` 並使用 python 執行 `install.py` ```shell= # 切換到 ~/.vim/bundle/YouCompleteMe cd ~/.vim/bundle/YouCompleteMe git submodule update --init --recursive # py 編譯檔案 python3 install.py --clang-completer cd ~/.vim/bundle/YouCompleteMe/third_party/ycmd python3 build.py ``` 5. 複製 `.ycm_extra_config.py` 到 `~/.vim` 目錄下 ```shell= cp -r ~/.vim/bundle/YouCompleteMe/third_party/ycmd ~/.vim ``` 6. 為了配置 YouCompleteMe 插件,可在 `.vimrc` 文件中添加以下內容 ```cmake= " YouCompleteMe let g:ycm_server_python_interpreter='/usr/bin/python' let g:ycm_global_ycm_extra_conf='~.vim/.ycm_extra_conf.py' ``` * 開啟 vim 寫一個簡單的 c 檔案,輸入一半字它就會猜測你要輸入的內容 >  ### 自動索引 - vim-gutentags * 在上面我們使用 ctags 的時候都要手動創建 tags,而 **vim-gutentags 是可以自動產生 tags 引索的插件** 1. 在 `.vimrc` 中設定安裝 vim-gutentags 插件 ```shell= # .vimrc 檔 Plugin 'ludovicchabant/vim-gutentags' ``` 2. 進入 Vim 底行模式,輸入 `:PluginInstall` 3. 為了配置 YouCompleteMe 插件,可在 `.vimrc` 文件中添加以下內容 ```cmake= " vim-gutentags let g:gutentags_project_root=['.root','.svn','.git','.hg','.gutentags_project_root'] let g:futentags_ctas_extra_args=['--field=+niazS','--extra=+q'] let g:futentags_ctas_extra_args=['--c++-kinds=+px'] let g:futentags_ctas_extra_args=['--c-kinds=+px'] ``` ## 使用 Vim IDE Loading Linux https://github.com/torvalds/linux.git ## Appendix & FAQ :::info ::: ###### tags: `Linux 基礎`
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.