1. 程式人生 > >VIM常見用法總結

VIM常見用法總結

變量 閱讀 meta vim gui 其中 red 字段排序 復制

歡迎和大家交流技術相關問題:
郵箱: [email protected]
博客園地址: http://www.cnblogs.com/jiangxinnju
GitHub地址: https://github.com/jiangxincode
知乎地址: https://www.zhihu.com/people/jiangxinnju

vim中光標如何回到上一次位置

ctrl + o

vim如何刪除某行至某行之間的內容?

刪除3104至5403行之間的內容:

:3104,5403d

vim使光標始終在屏幕中央

  • zz是卷頁面使光標到中間
  • M是移動光標到中間
  • :set scrolloff=10 可以讓光標一直在中間,調整數的大小可以控制區域

vim的列編輯操作

  • 刪除列:光標定位到要操作的地方。CTRL+v 進入“可視 塊”模式,選取這一列操作多少行。d 刪除。
  • 插入列:例如我們在每一行前都插入"() ":光標定位到要操作的地方。CTRL+v 進入“可視塊”模式,選取這一列操作多少行。SHIFT+i(I) 輸入要插入的內容。ESC 按兩次,會在每行的選定的區域出現插入的內容。

利用vim查詢函數用法

當光標處在函數名稱時:按K即可進入函數說明(相當於man),也可以使用nK制定man的級別

vim跨文件復制

打開一個文件,在該文件下復制幾行到另一個文件(如到test.txt),會覆蓋目標中的內容

10,100w!test.txt

在該文件下復制幾行到另一個文件,但不會覆蓋原內容,即追加

10,100w!>>test.txt

在一個文件中復制幾行到緩沖區

"anyy

在另一個文件中粘貼

"ap

解決往vim裏粘貼格式散亂的問題

有時候從編輯器裏面復制粘貼代碼到vim中,代碼格式會完全亂套。其原因是vim開啟了smartindent(智能縮減)或autoindent(自動對齊)模式。為了保持代碼的格式,在粘貼前可以先停止上面的兩種模式,命令為:

:set nosmartindent
:set noautoindent

為了一個粘貼搞出這麽多事來,確實是麻煩。不過還有一個更加簡單的方法,用命令開始粘貼模式,即:

:set paste

由於粘貼模式和上面的smartindent、autoindent模式是互斥的,而smartindent是不可少的,所以粘貼完後使用下面的兩條命令之一來關閉粘貼模式。

:set nopaste
:set paste!

另外還可以通過綁定自定義快捷鍵的方式來快速切換,例如將下面配置加入到.vimrc中

方式1:

set pastetoggle=<F4>

方式2:

:map <F8> :set paste
:map <F9> :set nopaste

註意:方式1在閱讀和編輯模式下都可以使用,對粘貼模式開啟和關閉進行切換;方式2是在閱讀模式下使用,按下相應的快捷鍵就相當於執行後面定義的命令。

解決在insert模式下面backspace鍵無法刪除的問題

vim 在插入模式下

:set backspace=indent,eol,start

或者:

set nocompatible

vim 替換

    :0,$s/^/#/gc " 在行首加一個#號
    :6,10s/^/#/gc " 在6~10行的行首加一個#號
    :%s/^ *//g " 刪除行首的空格
    :%s/ *$//g " 刪除行尾的空格
    :%s/^\n//g " 刪除空行
    :g/^s*$/d " 刪除空行

Vim局部排序

如果我們想以第4列數據進行排序,可以在vim中如此做:

1,12!sort -r -n -k4.1,5

-r 降序排序
-n 按數字大小排序
-k,表示根據那個字段排序,4.1,表示第4列第一個字符開始 ,5表示到第5個字段為結束
-t 後面跟分隔符,缺省是空格

在VIM裏面, 如果你要把從當前行以下20行按字母順序排序

.,+20!sort

同時打開、顯示多個文件

vim還沒有啟動的時候:在終端裏輸入

vim file1 file2 ... filen

vim已經啟動,輸入

:open file

同時顯示多個文件:

:split
:vsplit

文件間切換,對於用(v)split在多個窗格中打開的文件,這種方法只會在當前窗格中切換不同的文件。

Ctrl+6—下一個文件
:bn—下一個文件
:bp—上一個文件

在窗格間切換的方法

Ctrl+w+方向鍵——切換到前/下/上/後一個窗格
Ctrl+w+h/j/k/l ——同上
Ctrl+ww——依次向後切換到下一個窗格中

用vim修改文件編碼為utf-8

網頁常常會出現亂碼的情況,一般都是編碼設置不對造成的。例如一個網頁源文件的編碼不是utf8的,但聲明為utf8<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />網頁就會出現亂碼。可以用vim修改源文件編碼為utf8,命令是

:set fileencoding=utf-8

如果用vim打開文件時裏面有亂碼,可能用上面的命令修改文件後無法保存。可以用其他軟件打開文件,然後把內容拷貝到vim裏再保存就行了。

gvim編碼配置

Vim/Gvim 在中文 Windows 下的字符編碼有兩個問題:

  • 默認沒有編碼檢測功能
  • 如果一個文件本身采用的字符集比 GBK 大(如 UTF-8、UTF-16、GB18030),那麽其中無法在 GBK 中對應的字符都會出現亂碼,保存時會丟失。即使編輯文件時正確檢測出文件格式也無濟於事。

第一個問題的解決辦法是在 ~/.vimrc 中加入以下配置:

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

第二個問題的解決辦法是強制要求 Vim 的內部編碼采用某種 UTF 編碼。比如 UTF-8:

set encoding=utf-8

但是,把 Vim 的內部編碼設為 UTF-8 會帶來以下新問題

  • 使用非 GUI 界面的 vim 時會亂碼
  • 提示信息(比如E492: 不是編輯器的命令: foo)會亂碼

要解決非 GUI 界面的 vim 的亂碼問題,需要設置終端編碼為系統默認編碼:

set termencoding=cp936

而要讓提示信息不亂碼則要需要使用 UTF-8 版本的提示信息:

language messages zh_CN.UTF-8

綜上所述,在中文 Windows 下正確配置字符編碼,需要把以下內容加入你的 ~/.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

What is the

:help leader

ctags的安裝

ctags工具是用來遍歷源代碼文件生成tags文件,這些tags文件能被編輯器或其它工具用來快速查找定位源代碼中的符號(tag/symbol),如變量名,函數名等。比如,tags文件就是Taglist和OmniCppComplete工作的基礎。

sudo apt-get install ctags

在程序的根目錄下運行ctags -R,生成tags文件,然後在編輯程序時按Ctrl+]就會跳轉到當前光標所在東西的定義處。若有多個tag,執行:ts,進行選擇。按Ctrl+o即可跳回。不過,當修改過代碼後,需要重新生成tags。

VIM重新載入文件

有時候要使用VIM打開了一些文件,但是在其他地方把次文件改動了,例如使用git進行checkout等操作,需要重新載入此文件。

1 重新載入當前文件:

    :e
    :e! #放棄當前修改,強制重新載入

2 重新載入所有打開的文件:

:bufdo e 或者 :bufdo :e!
:bufdo命令表示把後面的命令應用到所有buffer中的文件。

大小寫轉換

  vim中大小寫轉化的命令是:gu或者gU,形象一點的解釋就是小u意味著轉為小寫,大U意味著轉為大寫。接下來說明對這兩個命令的限定(限定操作的行,字母,單詞)等等。

整篇文章大小寫轉換

打開文件後,無須進入命令行模式。鍵入

:ggguG/:gggUG

解釋一下:ggguG分作三段gg gu(U) G

  • gg=光標到文件第一個字符
  • gu(U)=把選定範圍全部小(大)寫
  • G=到文件結束

  • guw 、gue、gUw、gUe 只轉化某個單詞,光標後面的單詞便會進行大小寫轉換
  • gu5w、gu5e、gU5w、gU5e 轉換5個單詞
  • 1gU 從光標所在行往下一行都進行小寫到大寫的轉換
  • 10gU 則進行11行小寫到大寫的轉換
  • gU0 從光標所在位置到行首,都變為大寫
  • gU$ 從光標所在位置到行尾,都變為大寫
  • gUG 從光標所在位置到文章最後一個字符,都變為大寫
  • gU1G 從光標所在位置到文章第一個字符,都變為大寫

vim腳本

map
re: reduce 被映射的序列被遞歸映射
i: insert
n: normal
no: no

vim7.4的python相關配置

這裏只討論官方提供的windows版本的安裝文件對python的支持配置,至於自己編譯vim的情況,一般都很清楚python如何配置了,不在此討論。官方提供的gvim安裝文件默認是支持python和python3兩種模式的,編譯時帶有該選項,但並沒有附帶對應的運行庫和運行環境.所以在本地沒有安裝python時直接在vim中執行

:py echo "ABCDE"

會提示無法加載python27.dll, 針對於這種情況,請到官方下載 windows 版本的 32位 的python 2.7.x 安裝文件. 使用64位的python無法正常在gvim中使用。python3.x系列在某些vim相關插件中仍不支持,所以依舊推薦使用2.7.x

用vim格式化代碼

在vim的官方FAQ (http://vimdoc.sourceforge.net/cgi-bin/vimfaq2html3.pl)找到的:

格式化全文: gg=G

自動縮進當前行: ==

這個是原文節選:

14.6. How do I format/indent an entire file?

You can format/indent an entire file using the gg=G command, where

 gg - Goto the beginning of the file
 =   - apply indentation
 G   - till end of file

For more information, read

 :help gg
 :help =
 :help G
 :help ‘formatprg‘
 :help C-indenting

VIM 編輯二進制文件 (vim手冊載錄)

幫助文檔:23.4

vim 將文件所有行合並到一行

在 Normal Mode下執行:

ggvGJ

gg 用於跳到行首

v 轉換成 visual 模式

G 跳到最後一行

J 合並行

VIM 如何查看動態增長的log文件

:set autoread

VIM常見用法總結