{"id":13,"date":"2020-10-24T18:21:35","date_gmt":"2020-10-24T18:21:35","guid":{"rendered":"http:\/\/blogs.oregonstate.edu\/softwareengineering\/?p=13"},"modified":"2020-10-24T18:21:36","modified_gmt":"2020-10-24T18:21:36","slug":"time-for-a-rebuild","status":"publish","type":"post","link":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/2020\/10\/24\/time-for-a-rebuild\/","title":{"rendered":"Time for a Rebuild"},"content":{"rendered":"\n<p>If you know me you know that I&#8217;m a huge advocate for using Linux, terminal, and Vim. Out of the box, Vim may not be the most approachable piece of software to use. With a little (a lot) of time spent customizing it, it can become one of the most powerful tools in your arsenal. I&#8217;m so hopelessly down the rabbit hole of Vim, that I&#8217;m currently writing this blog entry in my terminal and when I&#8217;m done I&#8217;ll copy it into the browser.<\/p>\n\n\n\n<p>I find most IDEs to be bloated and confusing. There are options and settings deep in menu trees and drop down menus. You have to touch the mouse all the time. I&#8217;m sure there is a lot of functionality they provide but I don&#8217;t know that it&#8217;s there, where it is or how to use it. Instead of figuring all that out, I decided to take this lightweight, fast, sleek, portable, ubiquitous text editor and bloat it to hell myself. Piece by piece, one at a time, on my own terms kind of bloat. Every feature I add to my Vim has been put by me, I know how it works, I know what it does, and it&#8217;s configured to do work the way I expect. At this point my Vim behaves pretty much like an IDE. There&#8217;s code completion, linting, auto pairs, indentation, git diff indications, file tree navigation, debugging instances, snippets, filetype specific settings, and more. Discovering plugins has been a blessing and a curse. The first thing I do when I find out I&#8217;ll be coding in a new language is google &#8216; vim plugins&#8217;, start shopping, and download everything. If I spent less time streamlining my setup trying maximize efficiency, I might actually be able to get something done.<\/p>\n\n\n\n<p>Anyway, last night I decided to burn it all down. <\/p>\n\n\n\n<p>Auto completion is one of the most vital pieces and it&#8217;s the hardest to implement correctly. &#8216;YouCompleteMe&#8217; has been my go to code completion engine for a long time but it&#8217;s a pain to maintain. The core server requires compilation so every update to YCM or Vim requires a recompile and the config and completion flags are finicky. Overall it works as advertised once you get it to work, but getting there can be a struggle. The most recent update to YCM changed it&#8217;s requirements so it no longer works with my install of Vim. Further, the maintainers of YCM aren&#8217;t tagging their commits with versioning so I had to manually go find the breaking commit, check out the hash, and recompile.<\/p>\n\n\n\n<p>My operating system is Debian, which is great except for the fact that packages in the repo are often older. A lot of plugins require a Vim install of a certain version and often patches up to a certain point, which aren&#8217;t always easy to find. Which means compiling Vim from source; not too difficult, but enabling certain features requires having the proper libraries or header files installed which are tricky to track down.<\/p>\n\n\n\n<p>All of this started to seem excessively tedious so I decided to look for other options and I stumbled upon &#8216;Conquer of Completion&#8217;. CoC works on Vim8 and Neovim. Neovim is a heavily modified fork of Vim, inspired by the fact that the original author, maintainer, genius, and benevolent dictator for life behind Vim, Bram Moolenaar; Is very picky about what goes into Vim and has ridiculously high coding standards. Anyway I was interested so I installed Neovim, low and behold version too low (thanks Debian). Uninstall, pull source, compile (worked out of the box whaaaat?), install, then stay up until 1 am playing with it.<\/p>\n\n\n\n<p>Ok, cool it works. I can do my homework now\u2026 Why am I the way that I am?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>If you know me you know that I&#8217;m a huge advocate for using Linux, terminal, and Vim. Out of the box, Vim may not be the most approachable piece of software to use. With a little (a lot) of time spent customizing it, it can become one of the most powerful tools in your arsenal. [&hellip;]<\/p>\n","protected":false},"author":10823,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-13","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/posts\/13","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/users\/10823"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/comments?post=13"}],"version-history":[{"count":1,"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/posts\/13\/revisions"}],"predecessor-version":[{"id":14,"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/posts\/13\/revisions\/14"}],"wp:attachment":[{"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/media?parent=13"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/categories?post=13"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.oregonstate.edu\/softwareengineering\/wp-json\/wp\/v2\/tags?post=13"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}