1. Vim 命令模式時按 Tab 補全怎麼設置才能像 Emacs 列出多個
*'wildmode'* *'wim'*'wildmode' 'wim' 字元串 (Vim 預設: "full")全局{Vi 無此功能}用 'widechar' 指定的字元所用的補全模式。它是逗號分隔的不超過四部分的列表。每個部分指定每次連續使用的 'widechar' 要完成的動作。第一部分指定第一次使用時的行為。第二部分指定第二次使用時的,等等。每個部分的可能值如下:"" 只用第一個匹配補全。"full" 用下一個完整的匹配補全。在最後一次匹配之後,使用原來的字元串,然後又是第一個匹配。"longest" 用最長的公共子串補全。如果結果沒有變長,使用下一個部分。"longest:full" 類似於 "longest",但如果 'wildmenu' 打開的話,使用之。"list" 如果有多於一個補全,列出所有的匹配。"list:full" 如果有多於一個補全,列出所有的匹配並先用第一個補全。"list:longest" 如果有多於一個補全,列出所有的匹配並先用最長的子串補全。如果只有一個匹配,所有情況下都完整補全。
2. vim怎麼設置代碼補全
按ctrl+p就可以出補全列表了,當然你也可以安裝neocomplete之類的插件。
3. vim有自動補全功能嗎
YouCompleteMe是Vim的自動補全插件,與同類插件相比,具有如下優勢
1、基於語義補全
2、整合實現了多種插件
clang_complete、AutoComplPop 、Supertab 、neocomplcache 、Syntastic(類似功能,僅僅針對c/c++/obj-c代碼)
3、支持多種語言
c、c++、obj-c、c#、python
對於其他的語言,會調用vim設置的omnifunc來匹配,因此同樣支持php,ruby等語言。
4、YouCompleteMe除了提供了自動補全、自動提示錯誤的功能外,還提供了類似tags的功能
跳轉到定義GoToDefinition
跳轉到聲明GoToDeclaration
以及兩者的合體GoToDefinitionElseDeclaration
科普
Vim作為一款文本編輯器,針對文本自動補全這個功能來說,主要有兩種實現方式:
復制代碼
基於文本(acp,omnicppcompleter)
我們常用的omnicppcompleter,acp,vim自帶的c-x, c-n的實現方式就是基於文本。更通俗的說法,其實就是一個字:猜
其通過文本進行一些正則表達式的匹配,再根據生成的tags(利用ctags生成)來實現自動補全的效果。
基於語義
顧名思義,其是通過分析源文件,經過語法分析以後進行補全。由於對源文件進行分析,基於語義的補全可以做到很精確。但是這顯然是vim所不可能支持的。而且經過這么多年發展,由於語法分析有很高的難度,也一直沒有合適的工具出現。直到,由apple支持的clang/llvm橫空出世。YouCompleteMe也正是在clang/llvm的基礎上進行構建的。
4. vim自動補全設置問題
不用這么復雜的吧~ 括弧自動補全,越簡單越好,多了反而麻煩。我的是這樣的,用著還可以:
"括弧等的自動完成
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {<CR>}<ESC>O
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
function! ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endfunction
好像一模一樣哦,不過我的沒什麼問題啊~
5. linux vim 怎麼實現代碼補全的啊
vim 比較靈活,有自己的習慣的話,可以把它們加到 vim 里。
如果樓主希望在插入模式里,用 ctrl-d 它來實現刪除當前行的話,只要將如下語句加到 vimrc 文件即可:
inoremap<C-D><C-o>dd
<c-o> 用於在插入模式下暫時執行一個普通模式下的命令,執行後返回插入模式。
所以加了上面那個映射之後,ctrl-d 就相當於 eclipse 下的刪除當前行了。不過定義這個映射之後,ctrl-d 本來的功能(減少當前行的縮進)就會被覆蓋。
我沒用過 eclipse,ctrl-alt-up 是什麼功能也不知道。不過原理類似,想用 vim 模擬一些其它編輯器的快捷鍵不會很困難。
至於那個 for 的補全,可能是一些插件。有不少人開發了 vim 的插件以方便書寫代碼,原理基本上是一些替換。
最簡單的比如:
iabbrforifor(inti=0;i<10;i++)
加在 vimrc 里(如果只是想試驗一下,只要按冒號再照敲上面的語句就可以了),之後寫碼的時候只要寫 fori 空格回車之類的隨你,就會被自己替換成你之前定義好的代碼。當然要想讓這個自己替換的工作更方便好用,比如補全之後把游標停在第二個分句的 i < 後面等等之類的功能,就需要更復雜的定義。
vim 有很強的擴展能力,可以用來增強它的工作效率。插件樓主可以去官網上搜,不過越是方便的插件可能就越復雜,用起來可能也就越不順手(因為操作習慣很可能和自己需要的很不一致),學習起來的難度一般也越大。
6. vim怎麼設置括弧,引號等自動補全
假設你的需求是這樣的:輸入左括弧或引號(包括({['"),結果是成對出現的,並且游標自動移動到中間。
根據這個需求就可以寫個配置了:
inoremap(()<ESC>i
inoremap{{}<ESC>i
inoremap[[]<ESC>i
inoremap'''<ESC>i
inoremap"""<ESC>i
把這個配置放到~/.vimrc即可,重啟vim即可。
有問題歡迎追問評論!!!
7. Vim 敲代碼時的自動補全問題
如果你不能補全所有文件,請看'complete'選項的設置
命令行輸入 :set complete?
然後對照下面的說明,看看到底是怎麼回事?
'complete''cpt'字元串(預設:".,w,b,u,t,i")
局部於緩沖區
{Vi無此功能}
本選項控制關鍵字補全|ins-completion|在使用CTRL-P或CTRL-N時如何工
作,也用於整行的補全|i_CTRL-X_CTRL-L|。它指示補全的類型和需要掃描的位
置。這是一個逗號分隔的標志位的列表:
.掃描當前緩沖區(忽略'wrapscan')
w掃描其它窗口的緩沖區
b掃描其它緩沖區列表裡載入的緩沖區
u掃描緩沖區列表裡卸載的緩沖區
U掃描不在緩沖區列表裡的緩沖區
k掃描'dictionary'選項給出的文件
kspell使用當前激活的拼寫檢查|spell|
k{dict}掃描文件{dict}。可以給出多個"k"標志位,也可以使用模式。比
如:>
:setcpt=k/usr/dict/*,k~/spanish
<s掃描'thesaurus'選項給出的文件
s{tsr}掃描文件{tsr}。可以給出多個"s"標志位,也可以使用模式。
i掃描當前文件和包含的頭文件
d掃描當前文件和包含的頭文件里的定義名或宏|i_CTRL-X_CTRL-D|
]標簽補全
t等同於"]"
卸載的緩沖區不會載入,因而它們的自動命令|:autocmd|也不會執行,這使得
有些文件的補全效果出人意表(比如gzipped壓縮的文件)。整行補全也不會掃
描卸載的緩沖區。
預設是".,w,b,u,t,i",它意味著掃描:
1.當前緩沖區
2.其它窗口的緩沖區
3.其它載入的緩沖區
4.卸載的緩沖區
5.標簽
6.頭文件
如你所知,CTRL-N和CTRL-P可用於完成任何基於'iskeyword'的擴展(比如
字典|i_CTRL-X_CTRL-K|、頭文件里的模式|i_CTRL-X_CTRL-I|、標簽
|i_CTRL-X_CTRL-]|和普通的擴展)。
8. vim的命令行tab補全不好用啊,有什麼替換方案
'wildmode' 'wim' 字元串 (Vim 預設: "full")全局{Vi 無此功能}
用'widechar' 指定的字元所用的補全模式。它是逗號分隔的不超過四部分的列
表。每個部分指定每次連續使用的 'widechar' 要完成的動作。第一部分指定第
一次使用時的行為。第二部分指定第二次使用時的,等等。
每個部分的可能值如下:
"" 只用第一個匹配補全。
"full" 用下一個完整的匹配補全。在最後一次匹配之後,使用原來的
字元串,然後又是第一個匹配。
"longest" 用最長的公共子串補全。如果結果沒有變長,使用下一個部分。
"longest:full" 類似於 "longest",但如果 'wildmenu' 打開的話,使用之。
"list" 如果有多於一個補全,列出所有的匹配。
"list:full" 如果有多於一個補全,列出所有的匹配並先用第一個補全。
"list:longest" 如果有多於一個補全,列出所有的匹配並先用最長的子串補全。
9. 如何在vim中使用tab進行python代碼補全
我這里要介紹的功能叫"new-omni-completion(全能補全)", 你可以用下面的命令看看介紹:
:help new-omni-completion
你還需要在~/.vimrc文件中增加下面兩句:
filetype plugin indent on
打開文件類型檢測, 加了這句才可以用智能補全
set completeopt=longest,menu
關掉智能補全時的預覽窗口
請確定你的Ctags 已經安裝好, 並且生成的tags文件已經可以用了, 那麼我們就要抄傢伙開搞了.
用vim打開源文件
$ vim /home/wooin/vim71/src/main.c (linux下的,文件是一樣的。)
設置tags文件
:set tags=/home/wooin/vim71/tags
隨便找一個有成員變數的對象, 比如"parmp",
進入Insert模式, 將游標放在"->"後面,
然後按下"Ctrl+X Ctrl+O",, 顯示所有匹配的標簽,。
如果你增加了一些成員變數, 全能補全還不能馬上將新成員補全, 需要你重新生成一下tags文件, 但是你不用重啟vim, 只是重新生成一下tags文件就行了,
這時全能補全已經可以自動補全了。
vim中的其他補全方式還有:
Ctrl+X Ctrl+L 整行補全 Ctrl+X Ctrl+N
根據當前文件里關鍵字補全
Ctrl+X Ctrl+K
根據字典補全 Ctrl+X Ctrl+T
根據同義詞字典補全
Ctrl+X Ctrl+I
根據頭文件內關鍵字補全 Ctrl+X Ctrl+]
根據標簽補全
Ctrl+X Ctrl+F
補全文件名 Ctrl+X Ctrl+D
補全宏定義
Ctrl+X Ctrl+V
補全vim命令 Ctrl+X Ctrl+U
用戶自定義補全方式
Ctrl+X Ctrl+S
拼寫建議
是不是還是覺得沒有tab方便?好的,人家開發了一個叫做supertab.vim這個插件。安裝後,
在你的~/.vimrc文件中加上這兩句:
let g:SuperTabRetainCompletionType=2
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
以後當你准備按"Ctrl+X
Ctrl+O"的時候直接按<Tab>就好了,這下你滿足了吧。
我稍微再介紹一下上面那兩句配置信息:
let g:SuperTabDefaultCompletionType="<C-X><C-O>"
" 設置按下<Tab>後默認的補全方式, 默認是<C-P>, 「
現在改為<C-X><C-O>. 關於<C-P>的補全方式,
" 還有其他的補全方式,
你可以看看下面的一些幫助:
" :help ins-completion
" :help compl-omni
let g:SuperTabRetainCompletionType=2
" 0 -
不記錄上次的補全方式
" 1 - 記住上次的補全方式,直到用其他的補全命令改變它
" 2 - 記住上次的補全方式,直到按ESC退出插入模式為止