Что: 707157d15ebc01ac430bfc8d4b4c0dad5203eb27 Когда: 2020-12-22 13:51:41+03:00 ------------------------------------------------------------------------ Темы: go tip vim ------------------------------------------------------------------------ Как индексируется исходный код? https://lobste.rs/s/ujr9mg/how_do_you_index_code_your_projects Автор вопроса описывает свой use-case: * Fuzzy find and open a file in the project (FZF :Files or Ctrl+P) * Fuzzy find and jump to line in the open buffer (FZF :Lines) * Grep the project and jump to line (FZF :Rg) но прыгать на нужные "символы" (определения фунок и прочего) было бы очень здорово. Когда-то он использовал vim-gutentags, но это медленно для больших проектов и нужно не забывать про файл с тэгами. Да, создание тэгов для больших проектов может занять время (у меня наверно самые большие проекты по 10-15сек индексировались), но делается это ведь достаточно редко. Даже с активно разрабатываемым проектом не факт что за целый день я запущу переиндексацию (инкрементально вообще никогда не пробовал). Так что это терпимо. Меня больше напрягает размер этого файла по несколько мегабайт в лёгкую. И когда мне надо работать с OpenSSL и libtasn1 кодом, то я просто делаю символические ссылки на их исходник в своём проекте и ctags их отлично индексирует тоже. Зато его простота, возможно генерировать хоть руками и интеграция в Vim из коробки -- это стоит того! Достаточно узнать несколько команд для навигации по тэгам и вот уже из коробки можно удобно работать с тьмой языков программирования, не ставя для каждого свои уникальные плагины или ожидать наличия LSP (в котором и прыжки по определениям не факт что будут), который у меня в любом случае (ну кроме Go) ещё и медленнее будет работать. Даже при наличии работающего goto-definition в LSP я всё равно не использую его возможности (1ae39d6ffa08741a2564f3e095508ce49b11bf03), как минимум, ради скорости (интерактивного перехода). Для Python я ни у одного человека с Vim-ом не видел чтобы их language-aware плагины достойно прыгали на определения. Даже знакомый с Emacs-ом всё равно "путешествует" по коду через тэги. Конечно, всё ещё зависит и от программы которой создаются эти тэги. Я недавно перешёл на Universal Ctags (31a56f5de0234738b454049f5a18a8d8b65a11a3) потому что Exhuberant не знал ничего про Go. Для управления tags файлом я давным давно написал функу помощник и никаких плагинов никогда не использовал за ненадобностью: http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/ctags.vim;h=a76e736dc4f8528ee3ca7d9ae4569dcbc3ff80ed;hb=HEAD Где-то в корне проекта надо самостоятельно создать "tags" файл (touch flags), а дальше вызвать ":Ctags ЯЗЫКИ" ("C,C++", "Go", "Python", и т.д.). Вот и всё что у меня есть на эту тему. А дальше штатные встроенные команды для тэгов. Автор использует FZF для поиска файлов. Не приживались у меня как-то все эти fuzzy finder-ы. Но мне очень нравилось как работает дополнение пути в zsh-е и я использую самописный плагин для вызова zsh, осуществления дополнения в нём: 72bfea8fec7934c5c70a6a6795e48b8c8c9e920c http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/zshfe.vim;h=fd5e5b14616596802f7eaf01e804e34e0eadb936;hb=HEAD http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/zshfe.zsh;h=0dfcd68e96761bff887a860988e5ad7b1338322a;hb=HEAD Выглядит ужасно (vim запускает subprocess zsh, который в свою очередь запускает pty внутри которого другой zsh, скармливая ему искомую строку и tab, как будто это пользователь ввёл), но работает очень хорошо, регулярно использую. Для открытия FILE:LINE:COL строк использую самопереписный: http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/file_line.vim;h=65962d2f9fc8d2c0e77aec4f1bc0c5149020032b;hb=HEAD Для открытия выхлопа команд (в вышеуказанном формате) в консоли: http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=bin/bin/qq;h=250645a664e6476d699ad4ae135a2e5ee943207d;hb=HEAD Для перехода между буферами в которых FILE:LINE есть: родные возможности когда можно ввести только часть имени буфера, через одно нажатие tab-а: http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vimrc;h=f26cf6ef1857670c6695eb36a7f7bdad19e6ea65;hb=HEAD#l162 Ну и поиск по директориям/проекту через вызов :vimgrep или git grep, но через удобные самописные обёртки, сразу же делающие и экранирование нужное и открывающие quickfix: http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/grep.vim;h=e0878e7e2186e0fad352054a25b88cb79244b270;hb=HEAD http://www.git.stargrave.org/?p=dotfiles.git;a=blob;f=vim/.vim/plugin/ggrep.vim;h=7b52921113ff525e61bca15bf3c45828d7fa4f9a;hb=HEAD ------------------------------------------------------------------------ оставить комментарий: mailto:comment@blog.stargrave.org?subject=Re:%20%D0%9A%D0%B0%D0%BA%20%D0%B8%D0%BD%D0%B4%D0%B5%D0%BA%D1%81%D0%B8%D1%80%D1%83%D0%B5%D1%82%D1%81%D1%8F%20%D0%B8%D1%81%D1%85%D0%BE%D0%B4%D0%BD%D1%8B%D0%B9%20%D0%BA%D0%BE%D0%B4%3F%20%28707157d15ebc01ac430bfc8d4b4c0dad5203eb27%29 ------------------------------------------------------------------------ Сгенерирован: SGBlog 0.34.0