Vim i ctags tips and tricks [zamknięty]
Obecnie pytanie to nie pasuje do naszego formatu pytań i odpowiedzi. Oczekujemy, że odpowiedzi będą poparte faktami, referencjami lub wiedzą specjalistyczną, ale to pytanie będzie prawdopodobnie wywoływało debatę, argumenty, ankiety lub rozszerzoną dyskusję. Jeśli uważasz, że to pytanie można poprawić i ewentualnie ponownie otworzyć, odwiedź Pomoc centrum dla wskazówek. Zamknięty 9 lat temu . zamknięte. To pytanie i jego odpowiedzi są zamknięte , ponieważ pytanie jest off-topic, ale ma znaczenie historyczne. Obecnie nie przyjmuje nowych odpowiedzi ani interakcji.
Właśnie zainstalowałem Ctags (aby pomóc w rozwoju C++) z moim Vim (a raczej gVim) i chciałbym dowiedzieć się, jakie są Twoje ulubione polecenia, makra, skróty, wskazówki, które mu towarzyszą...
Podziel się swoim najlepszym arsenałem. Jakie inne dodatki Vim polecacie do tworzenia C++ on vim?Edytuj jaki inny dodatek użyłbyś w połączeniu z Ctags?
EDIT2 jakiej wersji gVim używasz z tagami? Czy to coś zmienia?
EDIT3 Jak zwiększyć swoje doświadczenie w programowaniu zarówno dużych, jak i małych projektów?
15 answers
Ctrl+] - przejdź do definicji
Ctrl+T - cofnij się od definicji.
Ctrl+W Ctrl+] - Otwórz definicję w układzie poziomym
Dodaj te linie w vimrcmap <C-\> :tab split<CR>:exec("tag ".expand("<cword>"))<CR>
map <A-]> :vsp <CR>:exec("tag ".expand("<cword>"))<CR>
Ctrl+\ - Otwórz definicję na nowej karcie
Alt+] - Otwórz definicję w pionie
Po wygenerowaniu znaczników. Możesz użyć następujących klawiszy aby oznaczyć i oznaczyć funkcje:
Ctrl+Left MouseClick
- Przejdź do definicji
Ctrl+Right MouseClick
- Jump back from definition
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-08 04:53:51
Jedna linijka, która zawsze wchodzi w mojevimrc:
set tags=./tags;/
To będzie wyglądać w bieżącym katalogu dla "tagów" i pracować w górę drzewa w kierunku korzenia, aż jeden zostanie znaleziony. Możesz być wszędzie w swoim drzewie źródłowym,a nie tylko korzeniu.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-16 21:52:36
Innym przydatnym pluginem do tworzenia C jest cscope Podobnie jak Ctags pozwala przeskakiwać do definicji, Cscope przeskakuje do funkcji wywołujących .
Jeśli masz cscope w katalogu ~ / bin/, Dodaj do swojegovimrc i użyj g^], aby przejść do funkcji wywołującej (patrz: help cscope).
if has("cscope")
set csprg=~/bin/cscope
set csto=0
set cst
set nocsverb
" add any database in current directory
if filereadable("cscope.out")
cs add cscope.out
" else add database pointed to by environment
elseif $CSCOPE_DB != ""
cs add $CSCOPE_DB
endif
endif
Prawie zapomniałem... Podobnie jak ctags - musisz wygenerować (i okresowo aktualizować) bazę danych. Używam następującego skryptu
select_files > cscope.files
ctags -L cscope.files
ctags -e -L cscope.files
cscope -ub -i cscope.files
Gdzie' select_files ' jest kolejny skrypt, który wyodrębnia listę plików C i nagłówkowych z pliku Makefile. W ten sposób indeksuję tylko pliki faktycznie używane przez projekt.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-19 15:40:48
Możesz dodawać katalogi do wyszukiwania ctags. Na przykład, mam indeks ctags zbudowany dla Qt4, i mam to w moim .vimrc:
set tags+=/usr/local/share/ctags/qt4
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-19 01:41:54
Wszystkie powyższe i...
Code_complete: parametr funkcji kompletny, fragmenty kodu i wiele więcej.
Taglist.vim: przeglądarka kodu źródłowego (obsługuje C / C++, java, perl, python, tcl, sql, php itp.)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-06 10:52:29
Używam ALT-left I ALT-right, aby pop / push from / to the tag stack.
" Alt-right/left to navigate forward/backward in the tags stack
map <M-Left> <C-T>
map <M-Right> <C-]>
Jeśli używasz hjkl
do poruszania się, możesz zamiast tego zmapować <M-h>
i <M-l>
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-19 01:47:21
Kilka definicji o tej samej nazwie
<C-w>g<C-]>
otwórz definicję w podziale, ale również zrób :tjump
, która albo przechodzi do definicji lub, jeśli istnieje kilka definicji, wyświetla listę definicji do wyboru.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-04-22 19:06:43
Najczęściej używam polecenia C -], które przeskakuje do definicji funkcji pod kursorem. Możesz go używać częściej, aby śledzić więcej połączeń. Po tym, C-o przywróci ci jeden poziom, C-i znów zejdzie głębiej.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-19 01:45:25
Znalazłem taglist plug-in a must-have. Wyświetla wszystkie znaczniki, o których wie (pliki, które otworzyłeś) w oddzielnym oknie i ułatwia nawigację po większych plikach.
Używam go głównie do programowania Pythona, ale może być lepszy tylko dla C / C++.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-02-21 09:52:25
Zamknąłem manipulację tagami w eksperymentalnej wtyczce mojej.
Jeśli chodzi o rozwój C++ w Vimie, odpowiedziałem już tam: używam własnego pakietu i kilku innych wtyczek.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:34:26
Od dwóch lat dostosowuję moje wtyczki Vima do obsługi projektu big enough c++. Możesz na nie spojrzeć.
Używają ctags i cscsope.
Http://www.vim.org/scripts/script.php?script_id=1638
http://www.vim.org/scripts/script.php?script_id=2507
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-14 14:47:19
Umieściłem następujące w moim .plik gvimrc, który przeszukuje drzewo z dowolnego punktu w poszukiwaniu pliku znaczników po uruchomieniu gvim:
function SetTags()
let curdir = getcwd()
while !filereadable("tags") && getcwd() != "/"
cd ..
endwhile
if filereadable("tags")
execute "set tags=" . getcwd() . "/tags"
endif
execute "cd " . curdir
endfunction
call SetTags()
Następnie okresowo regeneruję plik znaczników na górze mojego drzewa źródłowego skryptem, który wygląda następująco:
#!/bin/bash
find . -regex ".*\.\(c\|h\|hpp\|cc\|cpp\)" -print | ctags --totals --recurse --extra="+qf" --fields="+i" -L -
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-04-17 23:22:01
Używam Vima w macos, a oryginalny ctags nie działa dobrze, więc pobieram najnowszy i konfiguruję make make install GO. Instaluję ctgas w /usr / local/bin / ctags (aby zachować oryginalny)
"taglist
let Tlist_Ctags_Cmd = "/usr/local/bin/ctags"
let Tlist_WinWidth = 50
map <leader>ta :TlistToggle<cr>
map <leader>bta :!/usr/local/bin/ctags -R .<CR>
set tags=tags;/
map <M-j> <C-]>
map <M-k> <C-T>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-12-27 06:16:27
Dostosowałem powyższą funkcję wyszukiwania SetTags () (którą należy zastąpić równoważną set tags+=./tags;/
) do pracy dla cscope. Wygląda na to, że działa!
"cscope file-searching alternative
function SetCscope()
let curdir = getcwd()
while !filereadable("cscope.out") && getcwd() != "/"
cd ..
endwhile
if filereadable("cscope.out")
execute "cs add " . getcwd() . "/cscope.out"
endif
execute "cd " . curdir
endfunction
call SetCscope()
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-05-04 18:50:34
Kolejna iteracja w funkcji SetCscope () powyżej. Ustawia ścieżkę wstępną cscope, aby uzyskać dopasowania bez bycia w katalogu gdzie " cscope.out " jest:
function s:FindFile(file)
let curdir = getcwd()
let found = curdir
while !filereadable(a:file) && found != "/"
cd ..
let found = getcwd()
endwhile
execute "cd " . curdir
return found
endfunction
if has('cscope')
let $CSCOPE_DIR=s:FindFile("cscope.out")
let $CSCOPE_DB=$CSCOPE_DIR."/cscope.out"
if filereadable($CSCOPE_DB)
cscope add $CSCOPE_DB $CSCOPE_DIR
endif
command -nargs=0 Cscope !cscope -ub -R &
endif
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-06-13 16:53:19