vim自帶的補全功能

2021-06-05 09:34:28 字數 2936 閱讀 8936

vi7.0版本自帶了自動補全功能omni-completion。

那麼vim是如何找到匹配的單詞的呢?在預設的情況下,vim在查詢乙個單詞時是按照如下的步驟:

1 在當前檔案中進行查詢

2 在其他視窗中進行查詢

3 在其他的已裝入的緩衝區中進行查詢

4 在沒有裝入緩衝區的檔案中進行查詢

5 在當前的標記(tag)列表是進行查詢

6 在所有的由當前檔案的#include包含進來的檔案中進行查詢

當然了我們也可以自定義我們的查詢順序.

我們在使用自動完成功能時的命令ctrl-p是向後查詢匹配的單詞,而還有乙個命令ctrl-n是向前查詢匹配的單詞.他們有同樣的功能和作用,所不同的只是查詢方向上的不同.

vim還提供了許多的命令可以使得我們來自定義我們的一些查詢上的特徵.例如我們可以用下面的命令來告訴vim在在自動完成的查詢過程中忽略大小寫的區別:

:set ignorecase

這樣以後如果我們輸入ins,vim就會認為是insert,inside或者是instep.當然了前提是在我們所編輯的文字中含有這些詞,要不就會找得到了.

為了能夠精確的進行查詢來自動完成,我們並不希望上面的情況出現,我們可以設定一些選項來告訴vim區分大小寫的情況.這時我們要用到下面的命令:

:set infercase

這樣以後如果我們再輸入ins,與其相匹配的列表就成為了instep,inside,insert.我們可以通過按ctrl-p或是ctrl-n來進行匹配完成.

在大多數情況下,vim預設的設定可以很好的來完成工作,但是有時我們要定義自己的一些完成的選項,這時我們就要用到complete這個選項了.這個選項的格式如下:

:set complete=key,key,key

而這個命令中可能出現的key值如下:

. 當前檔案

b 已被裝緩衝區,但是沒有在視窗內的檔案

d 在當前的檔案中定義和由#include包含進來的檔案

i 由#include包含進來的檔案

k 由dictionary選項定義的檔案

kfile 名為的檔案

t 標記(tags)檔案

u 沒有載入的緩衝區

w 在其他視窗中的檔案

我們可以使用path選項來告訴vim如何來查詢我們在當前檔案中所包含進來的檔案.我們還可以指定乙個字典,這個選項的格式如下:

:set dictionary=file,file,....

這個選項定義了由命令ctrl-p和ctrl-n進行匹配查詢時所要查詢的檔案.在linux系統中這個定義檔案在/usr/dict/words中,所以如果我們要將這個檔案新增進來進行查詢的話,我們就要用到下面的命令:

:set dictionary=/usr/dict/words

如果我們要使用乙個我們自己的檔案也可以這樣的來設定

:set dictionary=/home/oualline/words,/usr/doc/words

我們也可以指定乙個字典檔案和k選項組合使用:

:set dictionary=k/usr/oualline/words

我們也可以多次的使用k這個標記選項:

:set dictionary=k/usr/dict/words,k/usr/share/words

在上面提到的ctrl-p和ctrl-n進行查詢匹配時查詢的範圍比較的寬範,我們當然也可以使用命令進行一些比較嚴格的查詢.這時我們可以使用命令ctrl-x.當我們輸入ctrl-x時我們會進入ctrl-x的乙個子模式.這時我們可以使用下面的命令進行查詢:

ctrl-d 巨集定義

ctrl-f 檔名

ctrl-k 字典

ctrl-i 當前檔案以及由#include包含進來的檔案

ctrl-l 整個行

ctrl-] 標記(tags)

ctrl-p 向前查詢,與沒有ctrl-x命令時相同

ctrl-n 向後查詢,與沒有ctrl-x命令時相同

ctrl-x

ctrl-d命令查詢巨集定義.他也會查詢#include檔案.當我們執行完這個命令以後就可以使用ctrl-p,ctrl-n來進行匹配查詢.

例如我們可以編輯下面的測試檔案:

include.h檔案中的內容

#define max(x,y) ((x)<(y)?(y):(x))

#define min(x,y) ((x)<(y)?(x):(y))

int sum(int i1,int i2)

main.c檔案中的內容:

#include "include.h"

#define more "/usr/ucb/more"

這時我們開始編輯main.c檔案,如果我們按下ctrl-x我們就會進入ctrl-x的子模式.如果我們要查詢乙個巨集定義,我們可以按下ctrl-d,這時就會在螢幕的底部簡單的顯示出有多少匹配的選項.這樣我們就可以用ctrl-p和ctrl-n來進行自動完成的功能了.而命令ctrl-x 

ctrl-]則是查詢下乙個標記(tag),標記是乙個c函式的定義.我們可以用命令ctags命令來生成乙個c函式定義的列表.我們可以這樣的來使用這個命令:

$ctags *.c *.h

這樣以後我們就可以在插入模式入下用ctrl-x 

ctrl-]命令來進行標記的查詢和匹配了.

在預設的情況下,vim編輯器只是簡單的顯示出標記的名字,我們可以執行下面的命令,這樣以後就可以顯示出整個標記了:

:set showfulltag

我們可以使用ctrl-x 

ctrl-f命令來匹配檔名.他會在當前的目錄下查詢檔案並會顯示出匹配的內容,這時你就可以用ctrl-p和ctrl-n命令來選擇你想要的匹配選項了.

到目前為止我們所說還只是對單詞進行操作,我們可以用命令ctrl-x 

ctrl-l對一行進行匹配操作,同樣的我們也可以用ctrl-n和ctrl-p來進行選項的匹配.我們還可以在輸入ctrl-x命令後用ctrl-y向下滾動文字,而用ctrl-e向上滾動文字.

**:

vim自動補全功能

本文 vi7.0版本自帶了自動補全功能omni completion。那麼vim是如何找到匹配的單詞的呢?在預設的情況下,vim在查詢乙個單詞時是按照如下的步驟 1 在當前檔案中進行查詢 2 在其他視窗中進行查詢 3 在其他的已裝入的緩衝區中進行查詢 4 在沒有裝入緩衝區的檔案中進行查詢 5 在當前...

vim 自動補全功能

大家都發現寫 的時候,有時候為了是變數名承載更多的資訊,可能名字會比較長,再次要使用變數名的時候,發現好像記不住了,記得以前vc 6.0的時候,可以使用乙個 工具,外號 番茄 如果是在vs這樣的環境中,自帶這樣的自動提示,vi vim這樣的環境 比較麻煩,原來有招的,今天才發現,在vim的輸入狀態下...

vim基礎學習之自動補全功能

本章我們學習自動補全功能 1.自動補全優先從當前的編輯區獲得補全列表 例如 我們寫下如下內容 aaaaa aabbb aaab 當我們再次輸入aa,然後我們按下tab的時候,會彈出乙個包含 aaaaa aabbb aaab的列表 觸發補全模式的條件 1.插入模式下 ctrl p ctrl n 或者t...