Linux : Vim 使用與配置

来源:https://www.cnblogs.com/xuyaowen/archive/2018/08/10/vim_usage.html
-Advertisement-
Play Games

由於經常使用 vim 編輯配置文件,有時候也會進行使用vim 編寫一些腳本和c/c++ 程式,所以配置一個常用的 vim 是很是必要的。這篇博文主要是記錄vim使用和配置相關的一些知識點。 關於vim : vim 是比較好用的編輯器,很多linux server 都自帶vi, vim 是vi 的升級 ...


由於經常使用 vim 編輯配置文件,有時候也會進行使用vim 編寫一些腳本和c/c++ 程式,所以配置一個常用的 vim 是很是必要的。這篇博文主要是記錄vim使用和配置相關的一些知識點。

關於vim :

  vim 是比較好用的編輯器,很多linux server 都自帶vi, vim 是vi 的升級版本。可以方便在linux 環境中進行安裝和配置。vim主要功能是編寫,並且有很好的擴展性。通過配置可以優化出適合自己的一種vim,並且可以把配置文件儲存到github或者遠程伺服器上,當進入新的環境之中,只需要幾行簡單的命令,就可以還原配置。vim 有三種模式: 一般模式,編輯模式,命令行模式。通過快捷鍵 esc, : 可以方便得在三種模式下進行切換。如果想詳細得瞭解 vim的使用可以閱讀 《VIM USER MANUAL》,不過你只閱讀本博文也是可以的。

vim 相關文件:

  1.  .viminfo : 
    • 在vim中操作的行為,vim會自動記錄下來,保存在 ~/.viminfo 文件中。 這樣為了方便下次處理, 如:vim打開文件時,游標會自動在上次離開的位置顯示。 原來搜索過的字元串,新打開文件時自動高亮顯示。 ~/.viminfo 文件是系統自動生成。
  2. .vimrc : 
    • vimrc文件是vim的環境設置文件。 整體的vim的設置是在 /etc/vimrc 文件中。 不建議修改/etc/vimrc 文件,每個用戶可以在用戶根目錄中設置vim,新建 ~/.vimrc
  3. .vim目錄:
    • .vim/ 目錄是存放所有插件的地方。vim 有一套自己的腳本語言 vimscript,通過這種腳本語言可以實現與 vim 交互,達到功能擴展的目的。一組 vimscript 就是一個 vim 插件,vim 的很多功能都由各式插件實現。此外,vim 還支持 perl、python、lua、ruby 等主流腳本語言編寫的插件,前提是 vim 源碼編譯時增加 ---enable-perlinterp、--enable-pythoninterp、--enable-luainterp、--enable-rubyinterp 等選項。vim.org 和 github.com 有豐富的插件資源,任何你想得到的功能,如果 vim 無法直接支持,那一般都有對應的插件。

vim 常用快捷鍵:

  1.  基本操作:
    • 移動:方向鍵,h, j, k, l ;  可與數字組合使用  10j, 向下10個字元, 20l:向右20個字元 ; 0 移動到行首,$ 移動到行尾; nG  n為數字,移動到第n行
    • 單詞為單位移動:w 正向移動到相鄰單詞的首字元、b 逆向移動到相鄰單詞的首字元、e 正向移動到相鄰單詞的尾字元、 ge 逆向移動到相鄰單詞的尾字元;配合查找字元的方式移動:fa 正向移動到第一個字元 a 處、Fa 逆向移動到第一個字元 a 處。非相鄰的單詞或字元間移動,你可以配合數字參數,如,正向移動到相隔八個單詞的首字元執行 8w、逆向移動到第四個 a 字元處執行 4Fa
    • 翻頁:Ctrl + f 向下翻一頁 ; Ctrl + b 向上一頁;  Ctrl + d 向下半頁 ; Ctrl + u 向上半頁
    • 查找:/word 向下查找 word ; ?word 向上查找word;  n 重覆前一次查找 ; N 重覆前一次查找,反向進行
    • 刪除:x 向後刪除一個字元; 向前刪除一個字元; nx n為數字,向後刪除n個字元; dd 刪除當前行;  ndd n為數字,刪除n行
    • 複製:yy 複製當前行; nyy n為數字,複製向下的n行 ; y1G 複製從第一行到當前行; yG 複製當前行到最後一行 ; y0 複製從行首到游標之間的字元; y$ 複製游標所在到行尾之間的字元
    • 粘貼:p 粘貼到下一行; P 粘貼到上一行; J 將當前行和下一行合併成一行; u 還原上次操作 ;  Ctrl+r 重做上一個操作;  . 小數點,重覆前一個操作
    • 編輯:i 游標所在處插入; I 當前行第一個非空字元出插入; a 游標下一個字元開始; o 下一行開始; O 上一行開始 : 進入編輯模式, esc 退出編輯模式;
    • 保存::w 保存文件; :w! 強制保存; :q 退出vim; :q! 退出不保存文件; :wq退出並保存文件, 表示進入命令行模式, esc 退出命令行模式。
    • 命令行: :! command 執行命令, 如 “:! ls -l” 列出當前目錄文件; 當你發現打開文件時沒有 保存許可權的時候,可以通過命令行模式獲取root 身份,w 保存文件。
    • vim 保存readonly 文件::w !sudo tee % : 運行外部shell命令,用 tee 把當前stdin緩衝區的數據寫到當前文件(%)
    • 幫助信息: :h 查看幫助信息, :h 插件 查看對應插件的幫助信息。
    • 快速搜索:游標停留在想要查找的單詞的任意一個字母上面, 然後輸入Shift + *  或者 Shift+#  ,即可以向下和向上搜索游標所在的詞,並且可以通過 或  N 進行上一個或下一個的匹配。此方法所有匹配單詞會高亮,要取消高亮,輸入:noh 來取消高亮.

 2. 塊操作:

    • 進入: v, V, ctrl + v
    • 選擇:v 字元選擇,游標經過的地方反白選擇; 行選擇,游標經過的整行反白選擇;Ctrl+v  塊選擇,長方形的方式選擇
    • 複製,粘貼,刪除:y 將選中的地方複製; d 將選中的地方刪除;p 進行粘貼

   3. 多模式編輯     

    • 編輯下一個文件 :n 
    • 編輯上一個文件:N
    • 列出文件: files
    • 打開多個文件:vim file1 file2 , 文件之間可以進行互相複製,通過vim。這樣在server中操作極為方便。

   4. 多視窗編輯:

    • Ctrl+w+j :移動下方視窗,先按Ctrl+w放開,然後 j 或者↓鍵
    • Ctrl+w+k :移動上方視窗
    • Ctrl+w+q :退出文件,同 :q
    • :sp [filename] :打開新視窗,filename可以為空,為空打開當前文件

 vim 常用配置選項:

  1. set nu : 顯示行號 , 取消:set nonu
  2. set ruler: 顯示狀態欄,右下角, 取消: set noruler
  3. 等,具體使用 可參見 我的vim 配置:

vim配置(myself):

" vim 自身功能配置
set nu " line number 
set cursorline " row line
set cursorcolumn "col line 
set hlsearch
set laststatus=2
set nowrap

" 前導鍵
let mapleader=";"

" 基礎配置
" filetype plugin on
" 命令映射,<Leader> 表示前導鍵
nmap LB 0
nmap LE $
nmap <Leader>q :q<CR>
nmap <Leader>w :w<CR>
nmap <Leader>Q :qa!<CR>
" 設置快捷鍵遍歷子視窗
" " 依次遍歷
nnoremap nw <C-W><C-W>
" 跳轉至右方的視窗
nnoremap <Leader>lw <C-W>l
" 跳轉至方的視窗
nnoremap <Leader>hw <C-W>h
" 跳轉至上方的子視窗
nnoremap <Leader>kw <C-W>k
" 跳轉至下方的子視窗
nnoremap <Leader>jw <C-W>j
" 讓配置變更立即生效
autocmd BufWritePost $MYVIMRC source $MYVIMRC
" 實時搜索
set incsearch
" vim 自動補全
set wildmenu

" 關閉相容模式
set nocompatible " vundle required
" 插件安裝
" vundle 環境設置
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
" vundle 管理的插件列表必須位於 vundle#begin() 和 vundle#end() 之間
call vundle#begin()
" let Vundle manage Vundle, required
Plugin 'VundleVim/Vundle.vim'
Plugin 'altercation/vim-colors-solarized'
Plugin 'octol/vim-cpp-enhanced-highlight'
Plugin 'Lokaltog/vim-powerline'
Plugin 'scrooloose/nerdcommenter'
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'scrooloose/nerdtree'
Plugin 'sjl/gundo.vim'
Plugin 'Valloric/YouCompleteMe'
"Plugin 'Valloric/YouCompleteMe'
" 插件列表結束
call vundle#end()
filetype plugin indent on

" code scheme 
syntax enable
syntax on
" set background=light
" colorscheme solarized

" powerline scheme
let g:Powerline_colorscheme='solarized256'
" 代碼縮進
" 設置編輯時製表符占用空格數
set tabstop=4
" 設置格式化時製表符占用空格數
set shiftwidth=4
" 自適應不同語言的智能縮進
filetype indent on

" 基於縮進或語法進行代碼摺疊
set foldmethod=indent
"set foldmethod=syntax
set nofoldenable

" vim-snippets
" let g:UltiSnipsExpandTrigger="<tab>"
" let g:UltiSnipsJumpForwardTrigger="<c-b>"
" let g:UltiSnipsJumpBackwardTrigger="<c-z>"
let g:UltiSnipsExpandTrigger="<leader><tab>"
let g:UltiSnipsJumpForwardTrigger="<leader><tab>"
let g:UltiSnipsJumpBackwardTrigger="<leader><s-tab>"
let g:UltiSnipsEditSplit="vertical"

" 啟用:Man命令查看各類man信息
source $VIMRUNTIME/ftplugin/man.vim
"
" " 定義:Man命令查看各類man信息的快捷鍵
nmap <Leader>man :Man 3 <cword><CR>

" 使用 NERDTree 插件查看工程文件。設置快捷鍵,速記:file list
nmap <Leader>fl :NERDTreeToggle<CR>
" 設置 NERDTree 子視窗寬度
let NERDTreeWinSize=22
" 設置 NERDTree 子視窗位置
let NERDTreeWinPos="right"
" 顯示隱藏文件
let NERDTreeShowHidden=1
" NERDTree 子視窗中不顯示冗餘幫助信息
let NERDTreeMinimalUI=1
" 刪除文件時自動刪除文件對應 buffer
let NERDTreeAutoDeleteBuffer=1

" 調用 gundo 樹
nnoremap <Leader>ud :GundoToggle<CR>
" YCM 補全菜單配色
" 菜單
highlight Pmenu ctermfg=2 ctermbg=3 guifg=#005f87 guibg=#EEE8D5
" 選中項
"highlight PmenuSel ctermfg=2 ctermbg=3 guifg=#AFD700 guibg=#106900
" 補全功能在註釋中同樣有效
let g:ycm_complete_in_comments=1
" 允許 vim 載入 .ycm_extra_conf.py 文件,不再提示
let g:ycm_confirm_extra_conf=0
" 開啟 YCM 標簽補全引擎
let g:ycm_collect_identifiers_from_tags_files=1
" 禁止緩存匹配項,每次都重新生成匹配項
let g:ycm_cache_omnifunc=0
" " 語法關鍵字補全            
let g:ycm_seed_identifiers_with_syntax=1

 本配置是參考網路上的配置方式來進行配置的,使用了 vundle 插件來管理vim 插件。 重定義了前導鍵:; , 使用了 的插件基本上來自github ,如果你們不明白具體的插件的作用,請訪問github主頁進行查詢插件功能和配置方式。

 配置功能如下:

  • 美化界面
  • 快速註釋功能
  • 模板補全功能
  • 工程瀏覽功能
  • 代碼補全功能

具體快捷方式,請看配置。配置好的vim 界面如下圖:

vim 環境配置主要是方便伺服器或者字元界面下的使用,現在圖形界面上也有很多優秀的工具像 vscode, atom 等。總之,怎麼方便怎麼來; 如果你覺得本文對你有幫助,請點擊右下角的推薦支持作者。

GitHub Repo : Vim 環境自動化配置腳本:https://github.com/yaowenxu/envfile/tree/master/vim 

保持更新,轉載請註明出處。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在項目中,有些模塊是開源的,沒有源碼或者不能改動源碼,想要修複、優化裡面的Bug,這時就需要用到patch了。 1. 生成patch 製作補丁有兩種法法,diff和quilt。 1.1 diff方法製作patch 1.1.1 示例 l 第一步,創建兩個文件,test.c源文件和修改後的文件test_ ...
  • 隨著時間的推移,硬碟驅動器上的文件會碎片化,並且電腦速度會變慢,因為它必須檢查驅動器上的多個位置以查找這些文件。要使電腦更高效地運行,請使用Windows中的內置工具對這些文件進行碎片整理。這是你應該怎麼做以及何時做的。 Windows 10,如之前的Windows 8和Windows 7免費下 ...
  • 因為公司業務需求,可能涉及到更改ssh遠程的埠號,用下麵方法輕鬆解決,廢話不多說! 1.打開ssh埠配置文件:vim /etc/ssh/sshd_config,找到如下圖所示的埠,改為自己想改的埠,也可以同時打開多個埠: 2.需要關閉SELinux,打開配置文件:vim /etc/seli ...
  • 繼昨天伺服器上應用 CPU占用過高 後面該應用宕掉了以後 java 一次CPU占用過高問題的排查及解決 今天又出現了更嚴重的問題 昨天解決完問題 今天早些時候 出現了系統無法登錄 查詢日誌定位應該數資料庫的問題 後面發現是磁碟滿了 其實還是昨天的出現問題的導致, 死迴圈刷了特別多的日誌,,導致磁碟空 ...
  • 環境 lunix(ubuntu) 1:添加文件 在 /etc/apt/sources.list.d/gitlab-ce.list 中添加一行 2:開始安裝 3:修改配置 /etc/gitlab/gitlab.rb 中修改 external_url (如 : external_url 'http:// ...
  • 將兩伺服器通訊問題擴展到多伺服器通訊問題,需要解決定址以及復用/分用問題,這就是數據鏈路層的主要作用。 ...
  • 前言 Internet最早來源於美國國防部ARPANet,1969年投入運行,到現在已有很長一段路了,各位想要瞭解發展史可以百度下,這裡就不多說了。 現如今當我們想要獲取一些資料,首先是打開某個瀏覽器,在地址欄輸入地址,想要的信息出現在你的面前。 大家有沒有想過輸入地址就能返回給你想要的信息是怎麼實 ...
  • 檢查了好久才知道原來是 sudo nano /etc/sysconfig/network-scripts/ifcfg-ens33 下的DNS配錯了,改好之後,sudo service network restart 就ok了 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...