Fastest auto-completion using Company and Ctags
This program enables the completion using Company mode and Ctags for Emacs. It’s fast because a new algorithm is used.
It shows the candidate immediately for huge project like Linux kernel.
Install and Setup
You could place company-ctags.el
under Load Path, then add (require 'company-ctags)
to your configuration.
But I recommend to use http://melpa.org/ to install the package.
Setup is simple,
(with-eval-after-load 'company
(company-ctags-auto-setup))
Usage
Step 0, Make sure company-mode is already set up.
Step 1, create tags file in project root,
find . -name "*.[ch]" | ctags -e -L -
Step 2, enjoy!
Tips
Load extra tags files
You can set company-ctags-extra-tags-files
to load extra tags files,
(setq company-ctags-extra-tags-files '("$HOME/TAGS" "/usr/include/TAGS"))
Ignore case
Set company-ctags-ignore-case
to ignore case when fetching candidates.
Use CLI program diff to improve performance
Make sure CLI program diff
is executable on Windows.
It’s optional but highly recommended. It can speed up tags file updating.
This package uses diff through variable diff-command
.
Linux/macOS needs no setup.
Fuzzy match
Set company-ctags-fuzzy-match-p
to fuzzy match the candidates.
The input could match any part of the candidate instead of the beginning of the candidate.
Here is example how to combine counsel with company-ctags
,
(require 'counsel)
(defun my-counsel-company ()
"Input code from company backend using fuzzy matching."
(interactive)
(company-abort)
(let* ((company-backends '(company-ctags))
(company-ctags-fuzzy-match-p t))
(counsel-company)))
You can use general.el so you could press rr
in insert mode to trigger my-counsel-company
,
;; In insert mode, press "rr" in 0.2 second to trigger my-counsel-company
(require 'general)
(general-imap "r"
(general-key-dispatch 'self-insert-command
:timeout 0.2
"r" 'my-counsel-company))
Rust programming language
Use rusty-tags to generate tags file for Rust programming language.
Add below code into ~/.emacs,
(setq company-ctags-tags-file-name "rusty-tags.emacs")
Contact me
Report bugs at https://github.com/redguardtoo/company-ctags.
License
This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.