2012-07-02 5 views
1

Я пытаюсь работать с ctags, и это просто не работает.Почему ctags не работает для меня?

Я следую за этим скринкастом: http://www.youtube.com/watch?v=4f3AENLrdYo. Когда я нажимаю Ctrl +], это не имеет значения.

Это мой .vimrc:

" vim:set ts=2 sts=2 sw=2 expandtab: 

call pathogen#runtime_append_all_bundles() 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" BASIC EDITING CONFIGURATION 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
scriptencoding utf-8 
set encoding=utf-8 
set fileencoding=utf-8 
set number 
set nocompatible 
" allow unsaved background buffers and remember marks/undo for them 
set hidden 
" remember more commands and search history 
set history=10000 
set expandtab 
set tabstop=4 
set shiftwidth=4 
set softtabstop=4 
set autoindent 
set laststatus=2 
set showmatch 
set incsearch 
set hlsearch 
" make searches case-sensitive only if they contain upper-case characters 
set ignorecase smartcase 
" highlight current line 
set cursorline 
set cmdheight=2 
set switchbuf=useopen 
set numberwidth=5 
set showtabline=2 
set winwidth=85 
set shell=bash 
" Prevent Vim from clobbering the scrollback buffer. See 
" http://www.shallowsky.com/linux/noaltscreen.html 
set t_ti= t_te= 
" keep more context when scrolling off the end of a buffer 
set scrolloff=3 
" Store temporary files in a central spot 
set backup 
set backupdir=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
set directory=~/.vim-tmp,~/.tmp,~/tmp,/var/tmp,/tmp 
" allow backspacing over everything in insert mode 
set backspace=indent,eol,start 
" display incomplete commands 
set showcmd 
" Enable highlighting for syntax 
syntax on 
" Enable file type detection. 
" Use the default filetype settings, so that mail gets 'tw' set to 72, 
" 'cindent' is on in C files, etc. 
" Also load indent files, to automatically do language-dependent indenting. 
filetype plugin indent on 
" use emacs-style tab completion when selecting files, etc 
set wildmode=longest,list 
" make tab completion for files/buffers act like bash 
set wildmenu 
let mapleader="," 
let g:ctrlp_max_height = 40 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" CUSTOM AUTOCMDS 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
augroup vimrcEx 
    " Clear all autocmds in the group 
    autocmd! 
    autocmd FileType text setlocal textwidth=78 
    " Jump to last cursor position unless it's invalid or in an event handler 
    autocmd BufReadPost * 
    \ if line("'\"") > 0 && line("'\"") <= line("$") | 
    \ exe "normal g`\"" | 
    \ endif 

    "for ruby, autoindent with two spaces, always expand tabs 
    autocmd FileType ruby,haml,eruby,yaml,html,javascript,sass,cucumber set ai sw=2 sts=2 et 
    autocmd FileType python set sw=4 sts=4 et 

    autocmd! BufRead,BufNewFile *.sass setfiletype sass 

    autocmd BufRead *.mkd set ai formatoptions=tcroqn2 comments=n:&gt; 
    autocmd BufRead *.markdown set ai formatoptions=tcroqn2 comments=n:&gt; 

    " Indent p tags 
    autocmd FileType html,eruby if g:html_indent_tags !~ '\\|p\>' | let g:html_indent_tags .= '\|p\|li\|dt\|dd' | endif 

    " Don't syntax highlight markdown because it's often wrong 
    autocmd! FileType mkd setlocal syn=off 
augroup END 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" COLOR 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
:set t_Co=256 " 256 colors 
:set background=dark 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" STATUS LINE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
:set statusline=%<%f\ (%{&ft})\ %-4(%m%)%=%-19(%3l,%02c%03V%) 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" MISC KEY MAPS 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
map <leader>y "*y 
" Move around splits with <c-hjkl> 
nnoremap <c-j> <c-w>j 
nnoremap <c-k> <c-w>k 
nnoremap <c-h> <c-w>h 
nnoremap <c-l> <c-w>l 
" Insert a hash rocket with <c-l> 
imap <c-l> <space>=><space> 
" Can't be bothered to understand ESC vs <c-c> in insert mode 
imap <c-c> <esc> 
" Clear the search buffer when hitting return 
:nnoremap <CR> :nohlsearch<cr> 
nnoremap <leader><leader> <c-^> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" ARROW KEYS ARE UNACCEPTABLE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
map <Left> :echo "no!"<cr> 
map <Right> :echo "no!"<cr> 
map <Up> :echo "no!"<cr> 
map <Down> :echo "no!"<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" MULTIPURPOSE TAB KEY 
" Indent if we're at the beginning of a line. Else, do completion. 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! InsertTabWrapper() 
    let col = col('.') - 1 
    if !col || getline('.')[col - 1] !~ '\k' 
     return "\<tab>" 
    else 
     return "\<c-p>" 
    endif 
endfunction 
inoremap <tab> <c-r>=InsertTabWrapper()<cr> 
inoremap <s-tab> <c-n> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" OPEN FILES IN DIRECTORY OF CURRENT FILE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
cnoremap %% <C-R>=expand('%:h').'/'<cr> 
map <leader>e :edit %% 
map <leader>v :view %% 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" RENAME CURRENT FILE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! RenameFile() 
    let old_name = expand('%') 
    let new_name = input('New file name: ', expand('%'), 'file') 
    if new_name != '' && new_name != old_name 
     exec ':saveas ' . new_name 
     exec ':silent !rm ' . old_name 
     redraw! 
    endif 
endfunction 
map <leader>n :call RenameFile()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" PROMOTE VARIABLE TO RSPEC LET 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! PromoteToLet() 
    :normal! dd 
    " :exec '?^\s*it\>' 
    :normal! P 
    :.s/\(\w\+\) = \(.*\)$/let(:\1) { \2 }/ 
    :normal == 
endfunction 
:command! PromoteToLet :call PromoteToLet() 
:map <leader>p :PromoteToLet<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" EXTRACT VARIABLE (SKETCHY) 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! ExtractVariable() 
    let name = input("Variable name: ") 
    if name == '' 
     return 
    endif 
    " Enter visual mode (not sure why this is needed since we're already in 
    " visual mode anyway) 
    normal! gv 

    " Replace selected text with the variable name 
    exec "normal c" . name 
    " Define the variable on the line above 
    exec "normal! O" . name . " = " 
    " Paste the original selected text to be the variable value 
    normal! $p 
endfunction 
vnoremap <leader>rv :call ExtractVariable()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" INLINE VARIABLE (SKETCHY) 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! InlineVariable() 
    " Copy the variable under the cursor into the 'a' register 
    :let l:tmp_a = @a 
    :normal "ayiw 
    " Delete variable and equals sign 
    :normal 2daW 
    " Delete the expression into the 'b' register 
    :let l:tmp_b = @b 
    :normal "bd$ 
    " Delete the remnants of the line 
    :normal dd 
    " Go to the end of the previous line so we can start our search for the 
    " usage of the variable to replace. Doing '0' instead of 'k$' doesn't 
    " work; I'm not sure why. 
    normal k$ 
    " Find the next occurence of the variable 
    exec '/\<' . @a . '\>' 
    " Replace that occurence with the text we yanked 
    exec ':.s/\<' . @a . '\>/' . @b 
    :let @a = l:tmp_a 
    :let @b = l:tmp_b 
endfunction 
nnoremap <leader>ri :call InlineVariable()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" MAPS TO JUMP TO SPECIFIC COMMAND-T TARGETS AND FILES 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
map <leader>gr :topleft :split config/routes.rb<cr> 
function! ShowRoutes() 
    " Requires 'scratch' plugin 
    :topleft 100 :split __Routes__ 
    " Make sure Vim doesn't write __Routes__ as a file 
    :set buftype=nofile 
    " Delete everything 
    :normal 1GdG 
    " Put routes output in buffer 
    :0r! rake -s routes 
    " Size window to number of lines (1 plus rake output length) 
    :exec ":normal " . line("$") . _ " 
    " Move cursor to bottom 
    :normal 1GG 
    " Delete empty trailing line 
    :normal dd 
endfunction 
map <leader>gR :call ShowRoutes()<cr> 
map <leader>gv :CtrlPClearCache<cr>\|:CtrlP app/views<cr> 
map <leader>gc :CtrlPClearCache<cr>\|:CtrlP app/controllers<cr> 
map <leader>gm :CtrlPClearCache<cr>\|:CtrlP app/models<cr> 
map <leader>gh :CtrlPClearCache<cr>\|:CtrlP app/helpers<cr> 
map <leader>gl :CtrlPClearCache<cr>\|:CtrlP lib<cr> 
map <leader>gp :CtrlPClearCache<cr>\|:CtrlP public<cr> 
map <leader>gs :CtrlPClearCache<cr>\|:CtrlP spec<cr> 
map <leader>gf :CtrlPClearCache<cr>\|:CtrlP features<cr> 
map <leader>gg :topleft 100 :split Gemfile<cr> 
map <leader>gt :CtrlPClearCache<cr>\|:CtrlPTag<cr> 
map <leader>f :CtrlPClearCache<cr>\|:CtrlP<cr> 
map <leader>F :CtrlPClearCache<cr>\|:CtrlP %%<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" SWITCH BETWEEN TEST AND PRODUCTION CODE 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! OpenTestAlternate() 
    let new_file = AlternateForCurrentFile() 
    exec ':e ' . new_file 
endfunction 
function! AlternateForCurrentFile() 
    let current_file = expand("%") 
    let new_file = current_file 
    let in_spec = match(current_file, '^spec/') != -1 
    let going_to_spec = !in_spec 
    let in_app = match(current_file, '\<controllers\>') != -1 || match(current_file, '\<models\>') != -1 || match(current_file, '\<views\>') != -1 
    if going_to_spec 
    if in_app 
     let new_file = substitute(new_file, '^app/', '', '') 
    end 
    let new_file = substitute(new_file, '\.rb$', '_spec.rb', '') 
    let new_file = 'spec/' . new_file 
    else 
    let new_file = substitute(new_file, '_spec\.rb$', '.rb', '') 
    let new_file = substitute(new_file, '^spec/', '', '') 
    if in_app 
     let new_file = 'app/' . new_file 
    end 
    endif 
    return new_file 
endfunction 
nnoremap <leader>. :call OpenTestAlternate()<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" RUNNING TESTS 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! RunTests(filename) 
    " Write the file and run tests for the given filename 
    :w 
    :silent !echo;echo;echo;echo;echo;echo;echo;echo;echo;echo 
    :silent !echo;echo;echo;echo;echo;echo;echo;echo;echo;echo 
    :silent !echo;echo;echo;echo;echo;echo;echo;echo;echo;echo 
    :silent !echo;echo;echo;echo;echo;echo;echo;echo;echo;echo 
    :silent !echo;echo;echo;echo;echo;echo;echo;echo;echo;echo 
    :silent !echo;echo;echo;echo;echo;echo;echo;echo;echo;echo 
    if match(a:filename, '\.feature$') != -1 
     exec ":!script/features " . a:filename 
    else 
     if filereadable("script/test") 
      exec ":!script/test " . a:filename 
     elseif filereadable("Gemfile") 
      exec ":!bundle exec rspec --color " . a:filename 
     else 
      exec ":!rspec --color " . a:filename 
     end 
    end 
endfunction 

function! SetTestFile() 
    " Set the spec file that tests will be run for. 
    let t:[email protected]% 
endfunction 

function! SetLineNumber() 
    " set the spec file that tests will be run for. 
    let t:spec_line_number=line('.') 
endfunction 

function! RunTestFileWithBacktrace(...) 
    if a:0 
     let command_suffix = a:1 
    else 
     let command_suffix = "" 
    endif 

    " Run the tests for the previously-marked file. 
    let in_test_file = match(expand("%"), '\(.feature\|_spec.rb\)$') != -1 
    if in_test_file 
     call SetTestFile() 
    elseif !exists("t:grb_test_file") 
     return 
    end 
    call RunTests(t:grb_test_file . command_suffix . " -b") 
endfunction 

function! RunTestFile(...) 
    if a:0 
     let command_suffix = a:1 
    else 
     let command_suffix = "" 
    endif 

    " Run the tests for the previously-marked file. 
    let in_test_file = match(expand("%"), '\(.feature\|_spec.rb\)$') != -1 
    if in_test_file 
     call SetTestFile() 
    elseif !exists("t:grb_test_file") 
     return 
    end 
    call RunTests(t:grb_test_file . command_suffix) 
endfunction 

function! RunNearestTest() 
    let in_test_file = match(expand("%"), '\(.feature\|_spec.rb\)$') != -1 
    if in_test_file 
     call SetLineNumber() 
    end 
    call RunTestFile(":" . t:spec_line_number) 
endfunction 

function! RunNearestTestWithBacktrace() 
    let spec_line_number = line('.') 
    call RunTestFile(":" . spec_line_number) 
endfunction 

map <leader>T :call RunTestFile()<cr> 
map <leader>t :call RunNearestTest()<cr> 
map <leader>B :call RunTestFileWithBacktrace()<cr> 
map <leader>b :call RunNearestTestWithBacktrace()<cr> 
map <leader>a :call RunTests('')<cr> 
map <leader>c :w\|:!script/features<cr> 
map <leader>w :w\|:!script/features --profile wip<cr> 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" Md5 COMMAND 
" Show the MD5 of the current buffer 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
command! -range Md5 :echo system('echo '.shellescape(join(getline(<line1>, <line2>), '\n')) . '| md5') 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" OpenChangedFiles COMMAND 
" Open a split for each dirty file in git 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
function! OpenChangedFiles() 
    only " Close all windows, unless they're modified 
    let status = system('git status -s | grep "^ \?\(M\|A\)" | cut -d " " -f 3') 
    let filenames = split(status, "\n") 
    exec "edit " . filenames[0] 
    for filename in filenames[1:] 
    exec "sp " . filename 
    endfor 
endfunction 
command! OpenChangedFiles :call OpenChangedFiles() 

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
" InsertTime COMMAND 
" Insert the current time 
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 
command! InsertTime :normal a<c-r>=strftime('%F %H:%M:%S.0 %z')<cr> 

И это моя версия ВИМ:

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May 5 2012 20:53:55) 
Included patches: 1-154 
Compiled by [email protected] 
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 
-python3 +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/local/share/vim" 
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -I/usr/local/include -g -O2 -D_FORTIFY_SOURCE=1  
Linking: gcc -L. -Wl,-Bsymbolic-functions -Wl,-z,relro -rdynamic -Wl,-export-dynamic -L/usr/local/lib -Wl,--as-needed -o vim  -lm -ltinfo -lnsl -ldl  -lruby1.8 -lpthread -lrt -ldl -lcrypt -lm 

Что я могу сделать?

Спасибо!

+0

У вас установлены ctags? и перезапустили vim? –

+0

Я сделал это: sudo apt-get install exuberant-ctags и его установили успешно. Я также перезапустил vim. – Dougui

ответ

2

я извиняться. Это была просто проблема с моей клавиатурой. С моей французской канадской конфигурацией я должен сделать Ctrl + Alt Car + ]. Я наберу эти ключи.

+0

Это нормально, это может помочь кому-то еще с такой же проблемой. –

+0

Я положил карту ¸ в мой .vimrc файл. Это проще. – Dougui

+0

Вы также должны отметить свой ответ как принятый. –

1

Некоторые простые тесты:

  • Чтобы использовать теги, вы должны сначала создать тег файла (который указательный все символы). Это делается путем выполнения ctags -R . из командной строки или :!ctags -R . от Vim.
  • После того, как вы выполнили команду, проверьте, что в каталоге создан файл tag. Это тестовый файл, поэтому вы можете проверить, выглядит ли список символов разумным.
  • Наконец, вы можете только прыгать по тегу, если Vim найдет файл tag на пути. Это достижение, установив опцию tags в вашем .vimrc

Я использую следующий вариант:

" search first in current directory then file directory for tag file 
set tags=tags,./tags 
+0

Это не работает. Файл тега создается, но у меня такая же проблема. – Dougui

+0

set tags = tags,./Tags должны быть установлены теги = теги, ../tags (дополнительная точка). Редактировать не позволит мне добавить одного персонажа, поэтому мне пришлось оставить комментарий. – equant