HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
ycm-core
YouCompleteMe
Python2013–2023
ycm-core / YouCompleteMe

YouCompleteMe

A code-completion engine for Vim

36Distinct people
38Mentions
1Explicit recommenders
25.9KGitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A code-completion engine for Vim

GitHub

Where it is used

No documented product use was verified in the last source check.

What people are saying

90% of the stuff I need to do are minor changes that don't need the nuance that requires a full Syntax tree. The other 10% I fire up an IDE for and make the change. For vim and…

zaphar used a recommendation phrase. One indexed comment matches. This is a phrase match, not a verdict.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

No other repository is repeatedly linked in the same discussions.

This week on Hacker News

Nov 8–Nov 15 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/15/2026, 9:28:18 AM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year38 dated mentions

Observed mentions: 2013-02-05 11:26:14 UTC to 2023-04-02 18:07:41 UTC.

0510152013-01-01 00:00:00 UTC to 2014-01-01 00:00:00 UTC (exclusive): 14 mentions; 2 submissions, 12 comments20132014-01-01 00:00:00 UTC to 2015-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2015-01-01 00:00:00 UTC to 2016-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2016-01-01 00:00:00 UTC to 2017-01-01 00:00:00 UTC (exclusive): 6 mentions; 0 submissions, 6 comments2017-01-01 00:00:00 UTC to 2018-01-01 00:00:00 UTC (exclusive): 5 mentions; 0 submissions, 5 comments2018-01-01 00:00:00 UTC to 2019-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments20182019-01-01 00:00:00 UTC to 2020-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2020-01-01 00:00:00 UTC to 2021-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2021-01-01 00:00:00 UTC to 2022-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 0 mentions; 0 submissions, 0 comments2023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2023

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20132013-01-01 00:00:00 UTC2014-01-01 00:00:00 UTC14212
20142014-01-01 00:00:00 UTC2015-01-01 00:00:00 UTC505
20152015-01-01 00:00:00 UTC2016-01-01 00:00:00 UTC505
20162016-01-01 00:00:00 UTC2017-01-01 00:00:00 UTC606
20172017-01-01 00:00:00 UTC2018-01-01 00:00:00 UTC505
20182018-01-01 00:00:00 UTC2019-01-01 00:00:00 UTC000
20192019-01-01 00:00:00 UTC2020-01-01 00:00:00 UTC101
20202020-01-01 00:00:00 UTC2021-01-01 00:00:00 UTC101
20212021-01-01 00:00:00 UTC2022-01-01 00:00:00 UTC000
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC000
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC101

From the project README

An excerpt from the repository, fetched Nov 13, 2026.

Read the project’s introduction
YouCompleteMe: a code-completion engine for Vim Help, Advice, Support Looking for help, advice, or support? Having problems getting YCM to work? First carefully read the installation instructions for your OS. We recommend you use the supplied install.py - the "full" installation guide is for rare, advanced use cases and most users should use install.py. If the server isn't starting and you're getting a "YouCompleteMe unavailable" error, check the Troubleshooting guide. Next, check the User Guide section on the semantic completer that you are using. For C/C++/Objective-C/Objective-C++/CUDA, you must read this section. Finally, check the FAQ. If, after reading the installation and user guides, and checking the FAQ, you're still having trouble, check the contacts section below for how to get in touch. Please do NOT go to #vim on Freenode for support. Please contact the YouCompleteMe maintainers directly using the contact details below. Vundle Please note that the below instructions suggest using Vundle. Currently there are problems with Vundle, so here are some alternative instructions using Vim packages. Contents Intro Installation Requirements macOS Linux 64-bit Windows Full Installation Guide Quick Feature Summary User Guide General Usage Client-Server Architecture Completion String Ranking General Semantic Completion Signature Help Semantic Highlighting Inlay Hints C-family Semantic Completion Java Semantic Completion C# Semantic Completion Python Semantic Completion Rust Semantic Completion Go Semantic Completion JavaScript and TypeScript Semantic Completion Semantic Completion for Other Languages LSP Configuration Writing New Semantic Completers Diagnostic Display Diagnostic Highlighting Groups Symbol Search Type/Call Hierarchy Commands YcmCompleter subcommands GoTo Commands Semantic Information Commands Refactoring Commands Miscellaneous Commands Functions Autocommands Options FAQ Contributor Code of Conduct Contact License Sponsorship Intro YouCompleteMe is a fast, as-you-type, fuzzy-search code completion, comprehension and refactoring engine for Vim. It has several completion engines built-in and supports any protocol-compliant Language Server, so can work with practically any language. YouCompleteMe contains: an identifier-based engine that works with every programming language, a powerful clangd-based engine that provides native semantic code completion for C/C++/Objective-C/Objective-C++/CUDA (from now on referred to as "the C-family languages"), a Jedi-based completion engine for Python 2 and 3, an OmniSharp-Roslyn-based completion engine for C#, a Gopls-based completion engine for Go, a TSServer-based completion engine for JavaScript and TypeScript, a rust-analyzer-based completion engine for Rust, a jdt.ls-based completion engine for Java. a generic Language Server Protocol implementation for any language and an omnifunc-based completer that uses data from Vim's omnicomplete system to provide semantic completions for many other languages (Ruby, PHP, etc.). Here's an explanation of what happened in the last GIF demo above. First, realize that no keyboard shortcuts had to be pressed to get the list of completion candidates at any point in the demo. The user just types and the suggestions pop up by themselves. If the user doesn't find the completion suggestions relevant and/or just wants to type, they can do so; the completion engine will not interfere. When the user sees a useful completion string being offered, they press the TAB key to accept it. This inserts the completion string. Repeated presses of the TAB key cycle through the offered completions. If the offered completions are not relevant enough, the user can continue typing to further filter out unwanted completions. A critical thing to notice is that the completion filtering is NOT based on the input being a string prefix of the completion (but that works too). The input needs to be a subsequence match of a completion. This is a fancy way of saying that any input characters need to be present in a completion string in the order in which they appear in the input. So abc is a subsequence of xaybgc, but not of xbyxaxxc. After the filter, a complicated sorting system ranks the completion strings so that the most relevant ones rise to the top of the menu (so you usually need to press TAB just once). All of the above works with any programming language because of the identifier-based completion engine. It collects all of the identifiers in the current file and other files you visit (and your tags files) and searches them when you type (identifiers are put into per-filetype groups). The demo also shows the semantic engine in use. When the user presses ., -> or :: while typing in insert mode (for C++; different triggers are used for other languages), the semantic engine is triggered (it can also be triggered with a keyboard shortcut; see the rest of the docs). The last thing that you can see in the demo is YCM's diagnostic display features (the little red X that shows up in the left gutter; inspired by Syntastic) if you are editing a C-family file. As the completer engine compiles your file and detects warnings or errors, they will be presented in various ways. You don't need to save your file or press any keyboard shortcut to trigger this, it "just happens" in the background. And that's not all... YCM might be the only Vim completion engine with the correct Unicode support. Though we do assume UTF-8 everywhere. YCM also provides semantic IDE-like features in a number of languages, including: displaying signature help (argument hints) when entering the arguments to a function call (Vim only) finding declarations, definitions, usages, etc. of identifiers, and an interactive symbol finder displaying type information for classes, variables, functions etc., displaying documentation for methods, members, etc. in the preview window, or in a popup next to the cursor (Vim only) fixing common coding errors,
Read the full README on GitHub

What Hacker News says

14 sources
WTF are you talking about? Vim have may have many demerits but segfaults is not on that list. If segfaults are that frequent you described then people would have jumped ship already. I can't comment on the code structure of Vim but it does not matter to me because end product is working fine for me for 5+ years. Also bad code structure did not stop continuous development of Vim. Just for example there were 1000 patches added to the core before Vim version was changed from 7.3 to 7.4 within 2 years. Important features like more python binding, lua bindings were added during this time. Even if you see the current patch log of 7.4 ftp://ftp.vim.org/pub/vim/patches/7.4/README 68 patches were added since 7.4 release. Though async future is not built-in there are several plugins for doing async operation, for example vim-dispatch[1] and vimproc
Read the rest
. Vimproc is more widely used. See Unite.vim[3] , neocomplete[4], VimShell[5] for demonstration. I would specially point to VimShell because with the help of it you can run REPL inside Vim and pass buffer content to it. Also there is YouCompleteMe[6] which provides FAST autocomplete. [1](https://github.com/tpope/vim-dispatch/) [2](https://github.com/Shougo/vimproc.vim/) [3](https://github.com/Shougo/unite.vim) [4](https://github.com/Shougo/neocomplete.vim) [5](https://github.com/Shougo/vimshell.vim) [6](https://github.com/Valloric/YouCompleteMe/)
In Actualvim – Sublime Text 3 input mode powered by Vim itself
I already have the latest version of cmake installed via homebrew. The problem appeared to be that YCM's install.sh script goes out of its way to determine the active version of python and link against its libraries[1]. For anyone with python installed via homebrew, that means it links to 2.7.3. Unfortunately, both MacVim and the homebrew version of vim link against the system python (2.7.2). As a result, loading YCM triggers an error resolving urandom and crashes vim. [1] https://github.com/Valloric/YouCompleteMe/blob/master/instal...
In YouCompleteMe - A code-completion engine for Vim
Sadly, it is still not working too well with Objective-C, which is currently my main language (1). Luckily, unofficial VIM plugins for XCode like XVim (2) or VIEmu (3) are getting better and better, so at least I can use vim bindings for objective-c now, too. Nevertheless, good clang support in Vim would still be great, so that I could tap into the huge amount of vim plugins during objc development. [1] https://github.com/Valloric/YouCompleteMe/issues/84 [2] https://github.com/JugglerShu/XVim [3] http://www.viemu.com/
In YouCompleteMe - A code-completion engine for Vim
java swt in linux is still horrible (yes i know there are workarounds such as patching your font [1]). but if you use jedi and by extension things like youcompleteme[2], vim-dispatch etc. the only thing that's really missing is debugging support and refactorings. omnisharp[3] does pretty cool refactorings with nrefactory. and the author youcompleteme is interested in having youcompleteme work as some sort of ide daemon, where you could for example add stuff like refactorings as ide features. vagrant and virtualenv support sounds interesting though. [1] http://gleamynode.net/articles/2280/ [2] https://github.com/Valloric/YouCompleteMe/ [3] https://github.com/nosami/OmniSharp
In One Year Later: Review of PyCharm 2.7 from a Vim User’s Perspective
Although this article was written in 2010, his general complaint still applies. Compare a code-completion engine written for Emacs, with that written for Vim: auto-complete [1] is written completely in Elisp and utilizes Semantic as a source (mentioned in the article; also full Elisp), while a completion engine for Vim can be written in C++/ Python: Python is first-class, and it's a simple matter of invoking 'py import vim' [2] (it interfaces with the C++ code by simply importing the prebuilt ycm_core.so [3]). There is still no widely-used well-maintained clang completer for Emacs; the most dominant one spawns clang for everything [4]. That said, Emacs has a very rich Elisp ecosystem that's not going away anytime soon. By focusing on extensibility from the very beginning, Emacs has done many things right (it's just an Elisp interpreter
Read the rest
with some editor functions bundled in); in comparison, Vim is a dumb-text editor focusing on keybindings, with extensibility as an afterthought. I don't think it is possible to replace Emacs today, primarily because writing a truly extensible text editor is a huge project with many boring parts, and there is no money to be made as a result. Elisp does have its drawbacks, and the Emacs community is suffering because of "philosophical" decisions like bzr (a dead project), instead of focusing on technical merit. So, the project will die a slow painful death, but I don't think that's happening anytime soon. The takeaway is that Elisp needs to learn to interface with other languages better. There is a dead Elisp <-> Ruby bridge [5], but clearly not enough has been done about it. [1]: https://github.com/auto-complete/auto-complete [2]: https://github.com/Valloric/YouCompleteMe/blob/master/autolo... [3]: https://github.com/Valloric/YouCompleteMe/blob/master/cpp/yc... [4]: https://github.com/brianjcj/auto-complete-clang/blob/master/... [5]: https://github.com/trogdoro/trogdoro-el4r
In Emacs is Dead (2010)
YouCompleteMe[1] was discussed here[2] not too long ago. Do you have any thoughts on how it compares to clang_complete and pysmell/rope? It would be nice if this new Go completer could be plugged into YCM (for example), or if these various plugins could combine efforts somehow. Superficially (I haven't read the source), YCM seems like it would have a pluggable backend since it already uses both llvm/clang and jedi(python) for completions. [1] https://github.com/Valloric/YouCompleteMe [2] https://news.ycombinator.com/item?id=5169062
In An autocompletion daemon for Go
>> Does anyone know of a guide to getting a sane, non-broken vim working with some basic plugins like syntastic There are a number of vim-setups that are popular. janus (https://github.com/carlhuda/janus), spf13 (https://github.com/spf13/spf13-vim) are pretty popular ones. >>Last time I tried I couldn't bind F-keys for some reason F keys bind fine for me, using OS X Terminal, and gnome-shell in linux. Are you using an esoteric term? >> I couldn't get syntastic's error marking column to stay on instead of shifting my text back and forth all the time That is using the SignColumn part of vim. As far as I know, vim doesn't allow you to force the existance of SignColumn. You can open up a bug report at their Google Code repo if you think its worthwhile >> I couldn't get auto-complete mapped to tab properly Depending on your language, YouComple
Read the rest
teMe (https://github.com/Valloric/YouCompleteMe) is amazing, but if you don't do C based stuff NeoComplCache is great too (http://www.vim.org/scripts/script.php?script_id=2620) >> the extra functionality of vim ends up being counter-productive when none of it works right To be fair, thats true of any tool.
In Vim After 11 Years

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.