Как использовать ctags для автозаполнения в vim - PullRequest
10 голосов
/ 28 сентября 2011

Я пытаюсь разработать Android-проект в vim. Но мне немного скучно искать в ctags один метод. Есть ли способ показать список автозаполнения в vim с помощью ctags?

спасибо

это версия моего ctags ниже:

Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Mar 21 2011, 10:34:51
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex

и версия vim:

Exuberant Ctags 5.8, Copyright (C) 1996-2009 Darren Hiebert
  Compiled: Mar 21 2011, 10:34:51
  Addresses: <dhiebert@users.sourceforge.net>, http://ctags.sourceforge.net
  Optional compiled features: +wildcards, +regex
ccheng@ccheng-desktop:~$ vim --version
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Mar 24 2011 07:10:07)
Included patches: 1-35
Modified by pkg-vim-maintainers@lists.alioth.debian.org
Compiled by buildd@
Huge version without GUI.  Features included (+) or not (-):
+arabic +autocmd -balloon_eval -browse ++builtin_terms +byte_offset +cindent 
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments 
+conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs 
-dnd -ebcdic +emacs_tags +eval +ex_extra +extra_search +farsi +file_in_path 
+find_in_path +float +folding -footer +fork() +gettext -hangul_input +iconv 
+insert_expand +jumplist +keymap +langmap +libcall +linebreak +lispindent 
+listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape 
+mouse_dec +mouse_gpm -mouse_jsbterm +mouse_netterm -mouse_sysmouse 
+mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg -osfiletype 
+path_extra -perl +persistent_undo +postscript +printer +profile +python/dyn 
+python3/dyn +quickfix +reltime +rightleft -ruby +scrollbind +signs 
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary 
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
 -toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo 
+vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp
 -xterm_clipboard -xterm_save 
   system vimrc file: "$VIM/vimrc"
     user vimrc file: "$HOME/.vimrc"
      user exrc file: "$HOME/.exrc"
  fall-back for $VIM: "/usr/share/vim"
Compilation: 
gcc -c -I. -Iproto -DHAVE_CONFIG_H     -Wall -g -O2 -D_FORTIFY_SOURCE=1      
Linking: 
gcc   -Wl,--as-needed -o vim       -lm -lncurses -lselinux   -lacl -lgpm

мой файл .vimrc:

   1 set autochdir
  2 filetype plugin indent on
  3 set nu
  4 set tags=./tags
  5 set path=.,..,../..
  6 set tabstop=4
  7 set hlsearch
  8 set cscopequickfix=s-,c-,d-,i-,t-,e-
  9 set tags=$HOME/gingerbread/frameworks/tags,$HOME/gingerbread/packages/provid    ers/ContactsProvider/tags
 10 
 11 :" Only do this part when compiled with support for autocommands.
 12 :if has("autocmd")
 13 :  autocmd Filetype java setlocal omnifunc=javacomplete#Complete
 14 :endif 
 15 setlocal completefunc=javacomplete#CompleteParamsInfo

Ответы [ 3 ]

11 голосов
/ 28 сентября 2011

Хочу уточнить: звучит так, будто у вас уже установлены ctags и вы хотите знать, как использовать его для автозаполнения имен методов, верно?

Как упоминает Роменель, <C-n> и <C-p> - это то, что вы ищете. Они complete using next match и complete using previous match соответственно.

Это не единственные типы автозаполнения, которые есть в vim, остальное смотрите :he ins-completion (включая орфографию и имена файлов). Я хотел бы отметить одно конкретное завершение: <C-x><C-o> (всеполнота), которое может оказаться полезным.

В случае, если вас интересует не только автозаполнение: в этом аналогичном SO-вопросе принятый ответ richq содержит некоторую полезную информацию о ctags в целом.

1 голос
/ 28 сентября 2011

Я не пробовал автозаполнение в VIM, но был найден быстрый поиск http://vim.wikia.com/wiki/Any_word_completion: Опция 'complete' контролирует, где производится поиск по ключевым словам (включая файлы, файлы тегов , буферы и т. Д.). ).

0 голосов
/ 18 декабря 2018

Вы можете завершить все с [TAB], с этим в vimrc.Мы используем [char] [char] [dot] [tab] для запуска завершения тега. Также см. https://stackoverflow.com/a/46645434/476175 о том, как интегрировать орфографию, тезаурус, словарь.

   :inoremap <Tab>   <C-R>=MoshTabOrComplete()<CR>
    function!               MoshTabOrComplete()
      if col('.') > 3 
        \ && strpart( getline('.'), col('.')-3, 4 ) =~ '^[a-zA-Z]\+[.]' "  prev 2 char are alpha+dot?
        " Tag-completion eg. print.<tab> will complete to printf or println
        return "\<BS>\<C-x>\<C-]>"
      endif
      " if exists("g:MoshThesaurusOmniCompleter") && col('.') > 3 
        " \ && strpart( getline('.'), col('.')-3, 4 ) =~ '^[a-zA-Z]\+[!%?~-]' "  prev 2 char are alpha+punct?
        " Calls MoshThesaurusOmniCompleter 
        " Test: qieut!<tab> will spell correct to quiet, more tests in ./thesaurus-omni.vim
        " return "\<C-x>\<C-o>"
      " endif
      if col('.') > 1 && strpart( getline('.'), col('.')-2, 3 ) =~ '^\w' " prev char is alphabet?
        " Usual omni-completion
        return "\<C-N>"
      endif
      " Insert regular TAB
      return "\<Tab>"
    endfunction
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...