0 to LSP : Neovim RC From Scratch

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
so I am gonna do this I am going to write my  neovim config from scratch no I mean really   from scratch all right so this is gonna include  my favorite plugins that I use the best remaps   of your lifetime LSP tree-sitter some basic editor  settings the whole nine yards and I'm gonna do it   from the vanilla Neo Vim experience all the way up  to the Giga chat neovim experience so I hope that   you've already pre-liked the video right there  just press it right now and once you do that you   can keep on going down you can go check out my new  Vim RC on the GitHub link provided all right so I   guess the first thing I need to do is create the  neovim directory CD into it and open up Vim now   this is a terrifying screen right here this is the  default netrw experience which is the file Tree by   Vim along with the default color scheme which is  I mean cyan's never looked this good okay 2023 is   going to be the year of cyan I can feel it right  here if you don't know where to put this folder   this neovim folder just type in :h rtp you'll see  right here at the very top this is where neovim's   going to look and this bottom one right here  very important we're going to use it as well all   right so the first thing we have to do is press %  because that means create file because that's the   mnemonic that was chosen I don't know any man is  creating a init.lua this will be the first place   that neovim looks I'm going to just type in print  hello if you're not familiar with Lua it's a dead   simple language look at that hello bottom corner  now let's press 'd' this will create a directory   not delete directory probably would have gone  with a capital D myself all right so let's create   the Lua directory any directory within the Lua  directory is requireable by Lua so let's press   enter go right into the Lua directory press D  again I'm going to create theprimeagen directory   you create whatever you want to press enter again  % yup create file init.lua going here print hello   from theprimeagen then I'm going to press colon  capital e x that stands for explore brings back   up that beautiful cyan net RW hit enter on the  two dots hit enter on the two dots go back to our   original one and require theprimeagen remember a  knit.lua is like index.html it's just like the one   it goes to quit open beautiful we got something  good going here so now let's make Vim usable all   right so the first thing I'm going to do is I'm  actually going to add a remap to make it really   easy to go back into netrw because I don't have to  press colon ex enter I want something that feels   a little bit faster to me so I'm going to go down  to Lua I'm going to go into theprimeagen and I'm   going to press percent sign to create that file  again and call it remap.lua in here I'm going to   type in vim.g.map leader equals a space and then  vim.key map set in normal mode leader ah leader   PV Vim command ex so what's going on here if  you're not familiar with remaps effectively   while in normal mode if I press leader PV it will  execute this command for me leader of course is   the space all right just to test this out let's  go colon SL this sources this file right here and   then space PV perfect it's looking good now the  thing we can't forget to do is go over to my init   file in theprimeagen directory and go require  theprimeagen remap by having this right here it   will automatically get sourced every single time  Neil Vim gets opened so quit reopen it back up   hello theprimeagen hello go into here leaderpv  awesome now we're cruising so the next thing   we need to do is to get a plug-in manager and a  fuzzy finder because I just feel like I need to   be able to hop between files quickly and nothing  does that better than a fuzzy finder except alright so to get a plug-in manager all we need  to do is go to the internet go to packer.niovim   and from in here we can just copy this  lovely command and just put it directly   into our shell lovely next go back to Packer  grab these couple lines right here copy them   go back to Vim now we're gonna go into Lua into  theprimeagen we're gonna create one more file   called packer.lua let's paste in what we got from  the internet and that there we go and the function   do so to Source it uh-oh we hit an error you know  why we haven't quit Vim reopen it back up going   to Lua go all the way to here now do it awesome we  just installed Packer so I didn't know about it so   now let's type in pack or sync just to give it a  go look at that we got ourselves a plug-in manager   let's close it let's go back to the internet let's  go to telescope.neovim it is a fuzzy finder built   by telescopic Johnson and maintained by Connie  the true hero really the true hero let's scroll   on down copy this Packer statement right here go  down to an empty line paste it in I press equal   to align it nicely re-so to shout it out again  and then of course pack or sync one more time   and look at that telescope is now installed but we  don't have any ways to pull it up without simply   typing in the command so let's add some remaps so  leaderpv brings back up netrw back one back one   create a directory called after going to after  create a directory called plug-in go into plug   and create telescope.lua and now let's go back to  Lua and grab these top two lines right here in the   Lewis section copy it paste it let's have our own  key bindings I want PF for project file it's going   to use find files and then we're going to do one  more I'm going to jump in here and go CP for fuzzy   finding go FF right here and get files what this  will do is allow me to have a git file search and   then an all file search since right now I'm not in  a git Repository I want to be able to just simply   grab every file and that is fine files right  here but there's times where you only want to   look at just files that are in git it's just much  faster think of node modules the heaviest thing   in the universe all right so let's add one more  remap this one is super useful let's actually I'm   going to yank it from this one and go over here  and let's go PS for project search and instead   of using this let's actually use a function  so I'm just going to write straight up code   to just execute when I press this inside of here  I'm going to take in built-in and do grep string   providing a search term which is going to be a  Vim function input and I'm going to provide grep   just like that boom put a little semicolon at the  end even though I didn't need to do a little Esso   and now I can type in leader PF look at that very  horribly colored fuzzy finder let's go to packer   wonderful I can even do leader PS which is  going to give me a little grep string down   there and let's find everywhere that we say  the word requires look at that we only have   it in one little place right there that's pretty  cool right and then of course control P it airs   we're not in it we're not in the git directory  this doesn't count correct no it doesn't count   but honestly the cyan's not working for me okay  I thought cyan was gonna be 2023 it's not going   to be so let's add a color scheme alright so  I chose Rose Pine for neovim gonna come down   here copy this line right here for the Packer  install paste it in equal AP for that beautiful   eight space indenting do a little so do a little  Packer sync watch it go and fantastic Rose Pine   is installed lost the waifu in the background  probably gained your subscription because you're   so blown away at this point Thank you I'd like  to say thank you especially when I set up that   LSP I know you're gonna like the video alright  so I see two things kind of wrong here first off   our transparent background went away and second  off the colors are just really not that great so   let's fix those two things so the first one's not  too hard to fix leader PV jump back here jump back   here go into the after going to plug in create a  file called colors.lua okay so we need to do two   things one we're gonna set the color scheme and  two we're gonna set a transparent background so   I'm going to create a global function I know you  don't have to do it this way there's plenty of   better ways to do it but this is the way I have  chosen I'm going to make sure I color it right   we're going to color the we're going to color  those pencils I'm gonna say color equals color   or Rose Pine so that way I always have a default  color so if it's just called from anywhere we're   always getting that nice Rose Pine experience  Vim command color scheme ah color and then now   we need to actually set the background to be  transparent so I'm gonna go like this Vim API   Neil Vim set HL zeros just for the global space  so every window gets this I'm gonna pass it normal   that just means like the thing this is just Vim  why is it called normal I don't know it's been   around probably longer than I have do a little  background equals none except of course lowercase then copy that do it one more  time and do it for float that   way it also happens for floats and  then give this a little shout out   beautiful but the colors are still not right we  need tree sitter if you're not familiar with tree   sitter tree sitter allows for an amazingly fast  parsing of your code that's in your editor right   now and it builds an incremental tree so every  change just you know changes one small part of   it and it provides highlighting vim's working on  indenting and it's incredibly fast it puts vs code   to shame and yes emacs already uses it okay and  pretty much every other editor Bud vs code alright   so let's go to tree sitter right here scroll on  down and just grab their installation line right   here and now we need to translate this leader  PF gonna open up my files go all the way over   to Packer go down to the bottom and let's add  this line right here but this time let's go use   put that in there jump over to this erase that  and call it run equals TS update there we go we've   created the exact same thing translated from plug  which is a different package manager to Packer   this one I'm gonna hit a beautiful so realize that  I accidentally created a syntax error go back here   erase that little squirrely brace do another so  do a little pack or sync awesome we now have tree   sitter and yes you'll notice that every single  time we install we lost that so now I can just go   Lua color my pencils but this time call it like  a function and bam we're back in the action we   got ourselves the waifu okay everything's fine now  but we now need to initialize tree sitter because   look at this it's still it's disgusting looking we  don't have any parsers or anything set up we need   to get stuff in here so it looks good all right  so I'm gonna go here I'm gonna go all the way   down to this and I'm just going to copy this whole  chunk of code because there's some things we're   gonna need in here so copy it leader PV let's  go back let's go back go after go plug and go   tree sitter.lua hopefully you're starting to see  a pattern here I create my Packer I install the   plugin I want I go to after I add the file that  kind of configures it it's pretty straightforward   let's paste in what we got from the internet  best way to do anything and I'm going to add   a couple items to this list because I also want  help for the vimhelp and I also want JavaScript   just in case I need to do some JavaScript or some  typescript because you never know you just never   know do I want to synchronously install it no  Auto install true ignore get the hell out of   here erase that comment I don't even know why I  need it enable absolutely we want those delicious   highlights enabled get C out of there get this  disable function out of there we don't need it   either do I want rejects doing highlighting no I  don't awesome let's do a little shout out you'll   notice that we start downloading parsers right  away these parsers will help give us beautiful   color and hopefully when it finishes we'll just  automatically see it all done if not we'll make   it happen alright so it looks like it didn't  do it let's do a little colon e are you ready   foreign well that was boring let's we'll quit  and then we'll open it back up okay let's go   into after plug-in tree sitter oh that looks  so much better look at all the colors that   is significantly better if we go back to that  Packer file tell me that does not look so much   better before it was just like only the strings  got anything everything else was just white this   is the power of teresitter but can I show you just  one more small thing something I just absolutely   love let's go here and type in tree sitter  playground neovan and go to this top option let's   scroll down the page okay it's just installed just  like plug was so I'm just going to grab this line   go all the way down here paste it in change plug  to use and call the function Shout It Out Packer   sync it's going to install playground I'm gonna  quit again Lua color my pencils awesome but now   we get something amazing I'm gonna go like this  TS here's all of our tree sitter functions right   but I'm gonna go TS playground after restarting  Vim we got this new function TS playground toggle   look at what happens when I do that we get all  this information what is this well this is the   actual AST that exists right now inside of my  editor due to tree sitter this is what you now   get access to if you ever wish to do any plugins  it is mind-blowing the power that is contained now   within your editor and you get free access to it  there's three more plugins we need to install to   make the Vim experience amazing let me show you  them so first one of course is mine Harpoon I   just think it's glorious way to navigate files so  I'm going to copy the URL up there copy that jump   into here paste that in Shout It Out Packer sync  it all right so Harpoon is installed let's just   open up any file within the after directory leader  PV opens up that netrw create harpoon.lua now we   just need to do a quick configuration of Harpoon  let's go like this local Mark equals require   harpoon.mark copy paste replace a mark with UI and  then of course now we just need to add some remaps   now before I do that I immediately notice my waifu  is gone I'm scared okay we're back became a member   Man became a member thanks for becoming YouTube  members I appreciate that both of you blazingly   appreciative all right so there's six remaps we  need to do not too hard of m key map set in normal   mode I want to be able to press leader a and add  the current file that I'm on to harpoon copy that   let's then do say Ctrl e and we can do UI toggle  quick menu and now I just need to be able to do   my navigations jump over to here do nav file one  but since I'm calling it as a function I need to   wrap it in a function so let's just wrap that in a  function really quickly there we go copy paste f h   r t control a pace f h r n Ctrl a control a paste  f h ah f h r s control AAA boom boom boom shout   this file out now we have a sweet navigation when  I press Ctrl e here's my Harpoon menu we have no   files in here leader a we now have a file we can  go right back to of course which is our Harpoon   file let's load up our Packer file let's add that  to our Harpoon list let's put that as number one   now we should be able to switch back and forth as  fast as we'd like between Harpoon and Packer all   right awesome the next must have plug-in of course  is undo tree right here so I'm just going to copy   the URL jump back over here copy paste paste it  in Shout It Out Packer sync beautiful Harpoon   my way back to Harpoon open up netrw create undo  tree.lua and now we need a remap I need to be able   to open up undo tree now I can't quite remember  it so let's just jump over here scroll down here   it is right here perfect that's the one we want  I'm just gonna paste that in and I'm gonna go Vim   key map set normal mode leader U of course I want  leader U and then all we need to do now is just   go Vim command undo tree fantastic let's shout it  out let's get our waifu back and now if we press   leader U we can see everything we've done so let's  go back to Packer and go leader U now what you're   going to see here is this little tree that's  going on right here so that means I should be   able to see all the changes that we have recently  made so now if I go right here this is a branch   right in our undo history so I could actually  start editing this branch and look at that we   actually have something moved around in here that  means I can actually go back to this one and start   doing stuff in here as well so if you ever have  something that ends up being in the past you can   search for it via undo tree it's very fantastic  or if you ever accidentally make a change that   you need to recover from undo tree is just so good  all right one more I'm just gonna copy I'm gonna   paste I'm gonna go like this T Pope Vim fugitive  I know the URL this point Shout It Out pack or   sync it we have fugitive again get the waifu back  jump over to Harpoon create a new file let's call   it fugitive.lua and now we just need to add a  simple remap vimkey map set in normal mode if   I press leader GS stands for git status that's how  I think about it I want to execute Vim command get   let's shout out this file leader GS I'm not in  the git repository so just to try this thing out   go CD Neo Vim get a knit awesome jump back here  leader GS it's still not there because you know   Vim just didn't know I was there to begin with  leader GS look at that we now have the ability   to manipulate and do stuff in git at this point I  think I have enough plugins to really be able to   move I have my undo tree I have a fuzzy finder I  have Harpoon I have git integration I have a nice   color scheme we're ready to rock all that's truly  left is the LSP and we have an amazing Vim setup   all right to set up the LSP just go to LSP zero  this thing is incredible I actually really like   it and so we need to find the installation face  so just go right here with this huge amount of   different plug-in that it just is an amalgamation  of everything you used to have to configure now   just into a single plug-in go back here jumped all  the way down to Packer paste everything in I just   have to format it so let's do one of those I still  have eight space indenting we're going to change   that here in a little bit now just do a little  so and of course Packer sync now we're going   to install all these other plugins that are all  related to LSP I'm going to quit that window get   the waifu back jump back over to Harpoon and let's  create a new file called LSP Lua and now we need   to configure our LSP so the easiest way to do that  is actually just to jump up here and just grab   this this will give you a preset LSP everything  set up ready to rock just for you I already have   kind of some things that I like so I need to kind  of edit this setup a little bit so I just pasted   in mine you don't need to see me set everything  up here we go so I have TS server eslint some   Neko Lua and rust analyzer fantastic here are some  remaps I like for when I'm doing my completion I   like control p and N to go you know previous  and next on my completion list Ctrl y accepts   it space starts the completion I don't want any  sign icons sign icons are just not for me there   we go we set up it with our custom mappings that  I have for me this last one is a doozy but it's   really cool so on attach happens on every single  buffer that has an LSP that's associated with it   that means I'm going to have all these remaps only  exist for the current buffer that I'm on of course   a buffer being the text we're editing right here  that means these remaps only live for the life of   this buffer which means that if I go to something  that doesn't have a buffer I can still use GD for   jump to definition and it'll try to do vim's best  jump to definition effort but if I do have an LSP   I'll use my LSP instead this is a really handy  thing to do it might be a bit complex I should   probably take out this little print statement I  don't need help I don't know what was going on   there but you get the idea so now I'm just going  to save this and look at this we're installing   all these beautiful things awesome we have  everything installed now we're ready to rock   so I opened up my Advent of code 2022 notice  I still have the hello from theprimeagen and   hello let's go into here let's jump into say day  one from 2022 Advent of code we should have our   LSP automatically installed right here awesome  everything's getting highlighted we're looking   good and I should just be able to start typing Max  look at this you can see all right here's all the   different things that are available when I press  this we now see all the different things that are   available for a you size integer which means I  can call sort by look at that I can call sort on   this oh it's not a u size it's this oh this is a  vector vector view size my bad but there we go LSP   setup it was that simple you didn't have to do all  the remaps you could have just simply stuck with   these three lines that have the default neovim  LSP zero experience that's pretty dang easy it   uses Mason under the hood if you're not familiar  with Mason effectively Mason allows you to just   peruse packages and install anything at your  will oh you want Dino let's hit I boom we are   now installing Dino right now well look at that  look at it go it's that easy and if you open up   a file in which it detects it will ask you hey do  you want to install the language server associated   with this file type it's pretty damn inconvenient  at this point my Vim experience is pretty much on   point but it is missing a couple things notice  I have no line numbers no relative line numbers   I'm still indenting at eight tab indents right so  there's some basic sets that need to be set up for   my Vim experience to be complete and then I have  some remaps that just really Turbo Charge my Vim   experience alright so the first thing I want to  do is go back to my init let's remove this hello   statement we just don't need it in there let's  go back let's go into our knit that's inside of   theprimeagen folder and let's remove that one as  well alright so now what we need to do is add some   sets to make my editor experience a bit better  because like I want to automatically have line   numbers I want them to automatically be relative  so as I move I can kind of jump between the lines   I want to be on like I want to be able to press  8 up and know I need to go to that line all right   so let's add a set dot Lua let's make sure we  go back to our knit folder copy that jump over   to this R and type and set I want to make sure  I have that set file I should be able to use   leader GD and notice that it jumps over here to  set.lua since we have LSP zero installed that's   pretty handy all right so now it's just all my  Vim sets I need to add so instead of typing them   I just cut and paste them all in here let me go  over them one at a time I like a fat cursor so   right now when I press o and I go into insert mode  notice my cursor is really really thin let's get   out of insert mode Let's type in shout out now  notice some things just happened to my screen   but when I press o I still have that fat cursor  it's just because I've been using Vim for just so   long that it just feels normal and natural next  of course line numbers I want line numbers plus   I want relative line numbers so if I wanted to  jump all the way down here to wrap I just know   to press 9k or J sorry it's so Ingrid in my head  I don't even remember the directions it goes this   next one just makes me have four space indents  hey Vim try to be smart about my indenting I   don't like line wrap I don't want them to do any  backups but instead I want my undo tree plug-in   to have access to Long running undo's that way I  can undo things from Days upon days ago these neck   X2 are out of the world awesome I do not like it  when I search that it keeps the terms highlighted   but I love incremental search check this out so  if I go Vim you'll notice that it's highlighting   as I search if I do dot star you'll notice it does  the whole thing if I do equal space you can see it   kind of going so that way if you have some tricky  searches or even searching or places that you're   doing you can use incremental search to really  guide you if you're doing the right thing I like   good colors the only thing really interesting in  here of course is scroll off which means that as I   go down I'll never have less than eight characters  towards the bottom except for when I'm at the end   of a file so if we were to add a bunch of spaces  down here as I would go upwards you'll notice that   it never has eight or never has less than eight  that's pretty cool right fast update time great   color column great and of course I think this is  just a better place to put my leader key it's with   all the other sets alright so the last thing I  need to do is just simply do all my high powered   amazing remaps so let's again let's go out here  and let's create let's just jump into remap and   let's start putting them in right here so I cut  and paste my previous shortcuts that I used to   have but I realized that I had a convenience  function for doing say a normal mode or remap   it kind of feels like the old vimway so let's  actually do a really amazing find and replace   right here so what I want to do is I'm going to do  this colon percent sign s that means do this for   the entire file I'm gonna do a slash and I'm gonna  do a fighting one-eyed Kirby except for I just do   a single dot so it's going to grab everything  that has a DOT right here then I'm going to go   nor map no recursive mapping opening parenthesis  then I'm going to replace that with Vim key map   set quotes slash one remember our first Little  Match group that we did so notice that our V   right here V Norm map becomes right there oh yeah  so good look at that did it all throughout the   entire thing right here hit enter everything has  been remapped properly even the X mode right there   let's go let me go over my remaps that I  use they're quite amazing so these first   two are out of this world they use the move  command and what they allow me to do is when   I'm highlighted I can go like this I can move  things around and if there is an if statement then guess what we can take these and we can  move them in and they'll automatically indent   how beautiful is that if you're not familiar  with Jay Jay simply takes the line below you   and appends it to your current line with the space  this one allows your cursor to remain in the same   place even though you're applying line after  line instead of putting your cursor way over   at the end because every time I did it my cursor  would be way over here instead I didn't want that   I wanted my J to stay in place these next two  are amazing what they do is they allow control   D and U which is half page jumping to just keep my  cursor in the middle it helps me just look in one   place as I move and so it doesn't feel nearly as  disorienting these next two are also fantastic it   allows Search terms to stay in the middle so when  I search for Vim it'll just keep my cursor in the   middle these are for good times on Twitch we're  not going to talk about that this one's fantastic   so check this one out so you know how sometimes  you have like say Foo and then you have bar and   you highlight and copy Foo and then you highlight  Barb and you want to paste Foo over it without   losing your Foo current paste buffer I have  leader p and what that's going to do is it's   going to delete my highlighted word into the void  register and then paste it over because that means   I still have Foo preserved how fantastic is  that for those that don't know Vim too well   what would have happened is this I would have  highlighted pasted and now I would just start   pasting bar and I didn't want that I didn't want  that these next three are just awesome have to   thank asborne for these ones effectively if I go  leader y it now goes to this right here you can   see it right here which is the plus register  which is also your system clipboard so now if   I go AP yank this paragraph what will happen is  I can now press Ctrl V and I can jump over here   and I can start pasting those in somewhere else  so I just have to do leader y to yank into my   system clipboard or just y to have it only within  Vim that way I can have these two things separate   because it really sucks when they're together some  more of that like deleting to void register either   in normal mode or in visual mode I know you're  gonna make fun of me there's one reason why I do   this that's because in vertical edit mode if you  just press control C to exit it won't actually   save all these changes vertically instead you  have to press Escape it's the only thing that   I can tell right now that's actually different  between control C and Escape so I just put a   remap because I'm so used to it okay I picked  up the Habit from IntelliJ 10 years ago give me   a break don't ever press capital Q honestly it's  the worst place in the universe this right here is   fantastic this allows me to press Ctrl F and now  I can switch projects I can go to Advent of code   2022. look at that we're back in our rust project  let's go back via tmux previous session did you   notice that little control a capital l that's  using tmux how fantastic is that oh my goodness of   course this is just quick fix navigation if you're  not used to the Quick Fix list it's out it's just   so good this last one's like a pretty fun command  so if I go like this space s what it's going to   do is it's going to give me this little menu right  here and now I can start replacing the word that I   was on pretty cool right and I really do like this  last one right here to show you what it does let's   create one more file let's call it Foo let's jump  in here let's go octothorpe bang forward user bin   and Bash let's create a little bash script and  let's go Echo hello and instead of doing that   thing where you have to go okay bash can up looks  like I'm installing uh The Bash tree sitter parser   thank you so instead of going out to the command  line and doing that chamode plus X path to this I   just go leader X and what oops leader X and what  it's going to do it's going to actually just make   this into something that is executable so when  I go CD Lua theprimeagen ls you'll notice that   Foo is actually executable pretty cool huh let  me delete that capital D deletes boom and there   you go we've just set up Vim to be amazing we have  get control we have undo tree we have LSP support   we have telescope fuzzy finding we have Harpoon  the greatest file Navigator ever tree sitter for   amazing colors awesome remaps to just make your  Vim experience creamy smooth and of course sane   default sets for a nice editor experience so I  hope that you really like this again press the   like button okay this this was this was difficult  and also if that final replace was magic say down   in the comments below let me know you want to  see a video on just some sweet and macro and   Search Foo in vim and I can make it happen for  you thank you the name is theprimeagen if you   haven't checked out kickstart.neovem it's made  by telescopic Johnson it's a great way to get   started with neovim it gives you pretty much all  the things you need off the rip and it's going   to have a lot of keys set up in a way that are  more familiar such as tab for scrolling through   autocomplete Etc so give it a check throw star  on you can find the link down in the description
Info
Channel: ThePrimeagen
Views: 1,272,268
Rating: undefined out of 5
Keywords: software, vim, programming, javascript, typescript, software engineering, web developing, web developer, software developer, developer, cpp, programmer humor, humor, reactjs, js, ecmascript, tc39, Netflix, Engineering, Engineer, Facebook, Amazon, Interviews, Software Interviews, vimrc, neovim, spacevim, vim c++, vim editor, text editor, vscode, vscode vim, vim plugins, autocomplete, vim autocomplete, nodejs, twitch, developer productivity, spacemacs, algorithms, datastructures, Data Structures, python, bash
Id: w7i4amO_zaE
Channel Id: undefined
Length: 30min 47sec (1847 seconds)
Published: Fri Dec 16 2022
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.