其实他的意思应该是给acm这个补全前端加一个后端😂
但是 citre 生成的 tags 文件是在远程主机上的,正常情况下解析工作是不是也应该在远程主机上
不是的,这个流程是在远程用 readtags 过滤 tags 文件,把输出传回本地再解析。解析的部分是 elisp 写的,当然不会在远端执行。
那估计网络传输时间可能占了大头
前些天在tramp上用citre,生成tags文件时(忘记是ctag还是gtag了),把我的整个project一起删了,没有去细追是啥原因,幸亏当时都commit了,没有unstaged change,然后通过repo sync来还原了worktree。
lsp-bridge 已经支持citre做后端补全了
citre mode开启以后,会自动接管 imenu,但是像emacs-lisp之类的mode,使用builtin的imenu会比citre更好用一些。请问如何配置 citre 的 imenu integration
目前想到的就是两种场景:1.在某些场合禁用 citre imenu (如 emacs lisp)2.在某些场合比如开启 lsp 的情况下,eglot 会接管 imenu,但是这个时候我想要把 citre 的 imenu 给加回来。
(setq citre-enable-imenu-integration nil)
不同的模式看能不能使用 mode hook 来配置, 比如你上面那个需求,加到 emacs-lisp-mode-hook 里面。
(defun my-do-not-use-citre-imenu ()
(setq-local citre-enable-imenu-integration nil))
(add-hook 'org-mode-hook #'my-do-not-use-citre-imenu)
(add-hook 'emacs-lisp-mode-hook #'my-do-not-use-citre-imenu)
感谢!这样子就可以了。 之前没想到原来是否 enable imenu 这种东西也是可以设定为buffer local的。
hi,我想请问一下,citre支持在多个tags里面查找吗?
最近在用citre来查java代码。
我在jdk,spring-boot等几个基础库里面都做了tag。
但是在自己库里面查的时候,想联查jdk和spring-boot等项目。
我知道在每个项目里面都可以用ctags指定目录生成jdk的tag。
但是这样jdk的tag就到处都在生成,空间也浪费了。
能不能我在一个项目里面,设置几个tags,在一个里面找不到就找另一个(jdk)里的tag呢?
目前不支持。我也想做多 tags 文件的支持,但是很多设计问题还没有想明白。
有没有变量什么的让我不管在哪儿都可以从固定的tags里面来peek呢?我试了下面的设置不行:
(defun peng-java-citre-peek ()
"a wrap for citre-peek for java."
(interactive)
(let ((default-directory "~/github/jdk/"))
(deactivate-mark)
(ring-insert find-tag-marker-ring (point-marker))
(citre-peek)))
有 citre--tags-file
。
收到,多谢。
如果您有研究出什么比较方便的做法,可以给我参考一下吗?谢谢
噢,这个到没有。我主要是最近要写java。然后有些java自己的定义,库什么的需要查看。
而我想在任意地方,随时想查就查。
然后我根据您提示的 citre--tags-file
定义了这个函数:
(defun peng-java-citre-jump ()
"a wrap for citre-peek."
(interactive)
(let ((citre--tags-file (concat (getenv "HOME") "/github/jdk/.tags")))
(deactivate-mark)
(ring-insert find-tag-marker-ring (point-marker))
(peng-citre-jump)))
目前jdk的tags里面,我把spring-boot的代码也加进去了。
然后我写java的时候,在一个项目里面,还是用本项目的tags在项目内跳转。如果是java或者spring的定义。我就用这个函数跳到jdk或者spring的目录里面去查。而在jdk和spring目录里面,又可以用他们自己tags了。
这样的话,就是我在任意地方都有对jdk的快速跳转的功能。一个类有什么方法也不用用脑袋记了,直接跳进去看源码。主要是速度是真的快啊。
同样的,我理解不只是java,其它的也可以这么玩。这个基本满足我目前阅读代码的需求了。就是补全还是只能限制在当前项目的tags里面。如果补全也可以选择的话,写代码我觉得都基本够用了。
还有就是,我想问下,citre能支持ignorecase不呢?
谢谢!还是很值得参考的。如果能像这样专门针对一个 tags 文件定义命令的话就很方便,但是想在 Citre 里面做成通用的话,用起来肯定还是会有点繁琐。
我现在的想法是提供两种方式切换 tags 文件,一种是一键从一个列表里面选择一个 tags 文件(列表可以用户自定义),再一键执行一个命令(命令也可以自定义),执行完以后就恢复到原先的 tags 文件;另一种就是完全切换到另一个 tags 文件。
citre能支持ignorecase不呢?
补全的话现在有 citre-tags-completion-case-sensitive
和 citre-global-completion-case-sensitive
,对跳转暂时没有支持。
这个是一种思路。或者是不是可以参考一下xcscope里面的 cscope-database-regexps
的思路。它可以不同的目录配置使用不同的cscope文件。
主要是我觉得,在读源码这种很烧脑的任务时,脑袋最好是不要被中断。比如我在读一个java代码时,需要跳到jdk的源码里。这个时候要我再选tags的话,感觉脑袋就被中断了。有点影响体验。
直接设计成在一个tags文件里查找,查找不到就去下一个tags文件里查找,这样子的设计目前的难点在什么地方呢?
原生vim里就是可以设置多个tags路径的的, setlocal tags = aaa,bbb,ccc
,这个是一个 buffer local 的值。
实现上都没什么难点,只是我觉得每种方案都有使用上的问题。
因为很多语言是允许符号重名的,您说的这种方案可能遇到「我知道我想查一个库里面的符号,但 Citre 只给我自己代码里面的同名符号」的问题。