Ultimate Neovim Config | 2024 | Launch.nvim

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
this is probably going to be a pretty long stream so um you know Buckle in um what I plan to do is I plan to go through and create I don't know why I can't do this create my neovim config from scratch so one second here so basically this let's go take a look at the actual config I'm probably going to keep um uh like interaction with comments to like like like a pretty low amount of interaction with comments for this stream just because it's going to be really long uh but let's head over to GitHub really fast and we'll take a look at the config all right and so this is the one we're going to be making we're basically going to be remaking launch. envm here all right so uh oh wait whoops uh give me one second okay should be good so now what we're going to be doing is we're going to be starting with um let's see here so we'll take a look at the in.a that's here and it looks like it's going to be complicated but it's actually not going to be that complicated and we're going to start with with a function so let me uh just go over what this is going to look like at the end you'll have something like this uh you'll be able to search through files and things like that obviously you're going to have a language server if you have co-pilot I'll probably set up co-pilot we'll set up l a line we'll set up all that kind of good stuff um but darn it one second is the mic not working I don't know if the mic's working or not you can hear me okay all right I might be having some issues with some other thing so we'll see if I'm actually able to get the stream done but hopefully we can so basically what we want to start with is just one simple function and so what this is going to do uh we're going to have this Global variable here called lazy plugin spec and then we're going to have a function called spec and what that's going to do is it's just going to add a bunch of specs to a table okay so this is like all the weirdness of how we're going to be starting right and then once we're done with that um everything should be actually pretty simple so that's what that looks like all right so now let's get started Let's Blow Away the config that we have now so I'll go to do config here and I'm just going to move envm to I don't know like env. old or something like that okay so we'll start up we got a brand new got a brand new config here with nothing in it so we're going to start like this we'll create EnV or whoops make your envm okay and now we're going to start with let's do in it. Lua okay and I'm not really actually going to do anything in here yet so that file just exists uh we'll make a directory called Lua we'll see the end there and now so the first thing that I'm going to recommend that you do is just create some sort of name space so this name space can be anything it could be your name so I could like make your like like Chris or something like that um for this I don't know I've been using user for a while but maybe in this case we'll use launch because I'm probably just going to like overwrite whatever is in that uh repository with whatever we end up creating here so I'm going to do make their launch okay so we'll go into launch and this is not going to be a neovim distribution this is going to be more like uh you can clone this and use it for yourself in the future or you can take code from it or you can do however you want to do uh you could follow along with this video and do it that way and just kind of write all this stuff from scratch and do things how you want I'm not going to be writing every single line from scratch I'm going to be a copy and pasting some stuff but I'm going to try to like explain it so that it makes sense um because you know uh I definitely didn't write every single line in my config from scratch a lot of the time you know you just show up to like the documentation and you just copy directly out of the documentation or like you'll see somebody has a cool function in their config and then you just copy and paste it and put it in yours so I'm not going to like write this line by line all right um will you use lazy's plug-in directory style configuration I have my own weird way of doing it uh but I really like my way so we're going to I'm going to do it my way and the nice thing about how I'm going to do this though is that you'll be able to uh you'll be able to take all of the pieces and you'll be able like if you do it the regular lazy way where you have like a plugin directory and you just drop specs in there you'll still be able to do that uh you'll still be able to grab like the specs out of this and do it that way if you want to do it that way so all right so we have this launch file I don't want to spend again I don't want to spend too much time uh doing this um and then I guess what we'll do because this is hard cuz actually the way that I had it before um you know what I'm going to stick with user for this uh yeah let's do that launch all right and then we'll do user okay so if you're following along here we are we have this we do print working directory we have config and Vim and inside of there we have one directory called Lua and one file called in it. Lua all right so inside Lua we have a user folder and what I'm calling this is like a name space so this is just so if you name a file something and some other plug has a file name that thing um these two modules these two Lua modules are not going to collide okay so that's kind of that's kind of the reason that I have this user here so let me uh do LS here you can see user try to make a little bit bigger and there you go so again we'll do a print workor and directory I'm Inc config andm Lua and now I'll go into user all right so let's do not that let's do this and we're just going to follow the way that I have it outlined in this config here and let's go to in it so we got user. launch all right so what we're going to do is we're just going to create inside of user now you can break this up like I've seen people do like core I've seen people do like and then they put like their keymaps and their options and core and then they put the other stuff and whatever [Music] um I don't know I'm not really like I don't really care about like having that fine grain level of like directory structure like I kind I don't like nesting things too deeply uh just because it gets kind of confusing um so I'm just going to throw everything in this directory and then maybe I'll change it in the future but I like to keep it pretty simple so what we're going to do is we're just going to create a file called launch. Lua okay yeah all right this is the new neovim color scheme by the way so I wanted to write like con I feel like I'm in typescript I've been writing too much typescript but um so like I mean you could barely see that but like once I create local like um like the way that they do keywords is they bold them if I do like a test is equal to do like some string here you can see like the colors like this is the new default color scheme for for NE of them all right so let's jump back over here go to Lua we go to user and we are looking for launch now let me just copy this in here this is how I'm going to start this config okay no maybe not copy paste there we go all right so this is how I'm personally going to start it I mean this little bit of code this is like the most like custom thing we're going to be doing but you'll see what it buys us in the future and I think if you follow me through this entire stream you'll appreciate what I'm doing here so I have a global variable it's just a global table what it's going to have so I have a function called spec this is also a global function called spec so you're going to be able to access this function called spec throughout your config and what it's going to do is it's going to just take in a lazy plug-in spec I mean you know there's no like typing here or anything like that but it it's you know I expect you to pass it a lazy plugin spec um and then what it's going to do is it's just going to like you know add it to this table so so okay this is the table right and then we're going to be importing the spec which is this item maybe I maybe I should actually like name that spec or something like that like I'm just calling it item but see the function takes an item all right we add it to this table here called lazy plug lazy plugin spec and then we just say import item okay so what this this is going to allow us to do is it's going to allow us to add lazy specs one by one all right and you'll see why I'm doing it this way and I'm not doing it like the normal lazy way um in a little bit okay so let's do edit or E yeah uh then I think we want to we could use this I don't use this enough but one second we'll do in it and now we're just going to do um this we're actually going to require so we're going to do require and we'll do um what would it be uh user. launch okay so that's not going to really do anything um let's see yeah that's not going to do anything yet the next thing that we're going to do I don't really want to waste a lot of time talking about things like options or I'll probably talk about some options and some key maps but I don't think it's like you know I don't really think that that's like the interesting part here so what I'm going to do is I'm just going to create another actually I already have another terminal open with all this stuff and already like a normal neov them instance so I can like navigate it really easily so I'm going to go to this options uh file here is that not going to work I don't know why that's not working but let's do options okay and so these are all the options I have set um some of these may actually be set by default uh but I don't know you know which ones are and which ones aren't I just know that I like these options so I'm going to just pass them in so let's go like this and what we'll do is we'll do uh in it. Lua we'll do a require here whoops uh we'll do user. options and again I'm not going to like Nest This and like core or something like silly and we're just do Lex like that I guess open this up open this up what is it this and your file name we'll do options. Lua and then we'll do whoops I don't think yeah okay and we're just going to put all those in there so now if we go to Lua whoops I guess I didn't put it where I expected it to put it so we'll move options really options into Lua user like that user okay so now we just have launch. Lua and then we have options. Lua okay so if we do PWD here okay we're Inc config envm Lua user if I open up the options. Loa this is all the stuff that's in there um so if I just kind of scroll through this uh I guess we'll we'll go over a couple of them uh so this is just so we'll be able to use the clipboard so you probably just saw me struggling like to paste things and the reason for that is because I'm used to having on name plus set which allows me to access like that system clipboard which instead of that I had to use like command V uh command height I like to keep that at one these are just for CMP so like just that's just yeah I even have a comment there that's mostly for that you can seal level zero um highlight search yeah if you want to use a mouse you know you can put a I don't really ever use the mouse there is some neat stuff you can do with the mouse now you can do like cut you can actually change this menu around so I think I have something in the menu uh where I can like change it to like go to definition or something like that on a function but this is not something that's super useful to me um I just I have it set I guess cuz I can um the popup menu height so pums stands for Popup menu and uh so this is just going to be the height of that uh pum blend is going to be like when you when you'll see like in the future we'll have a we'll have like a CMP popup menu and you'll see that there's a slight transparency to it and that's what that is uh show mode so like sometimes you'll see like what mode you're in down here like in this uh little command space whatever that's uh more annoying than anything else always show tabs I use tabs I don't use buffers some people put buffers up here like in their tabl line and I think that's not good I don't think you should be doing that smart case blah blah blah bunch of boring nonsense for the most part a lot of this stuff really isn't that crazy I do like relative line numbers I'm trying to use relative line numbers more so that I can like you know like easily count and just move between lines and stuff um so I do have that set but if you don't like the relative and what I mean by relative line numbers if you don't know is just like these little numbers here on the side right so you can see this is is the one that's highlighted I'm actually on line number 20 if I want to jump to like you know 10 lines down I just do like 10 then I'll do J right so I like that but you know if you don't you don't have to have that sign column we want that so we can see things like you know like errors and stuff like that like over here in the gutter um this is a gooey font like if you're using in a gooey or something and let's see is there anything else yeah I have some stuff like turning off the n RW Banner so if we do like Lex I I like never use netrw like ever like you saw me like I tried to add like a file and like I couldn't even add it to the right directory because I just like literally never use this but um you know like you probably have seen like if you open up Lex or if you open up like if you open up netrw then you'll see something at the top here like some like just nonsense right like explains how to use netrw and just like some text so I just I don't know if I ever do happen to open up netrw I just like the way that it looks when it's cleaner um and the other thing is too like I'm pressing Q because I'm so used to like closing out all my menus with q and we'll we'll add that later and I guess you can enable a mouse or something like that in there too all right so that that's like some options I went over them I'm not like I'm not going to go over options too much uh now let's go add some key maps so we'll do key maps okay and you can see again like I have this stuff nested all like it just goes Lua user and then the file name right um I I don't like to break up my config any more complicated than that for the most part because re really typically when I'm looking for this stuff anyway like um I don't know what happened there I must have deleted something but typically when I'm looking for stuff I'm like looking for it like with with telescope or something like that so I don't know what the issue with that is right now I guess probably because I move the config so that's probably why it's being a little a little wonky so now let's open up another file we're going to call it keymaps key maps. Lua we'll paste this in and now we can actually paste it in because I have the unnamed plus set and so what I'm doing is I'm just saying like Okay just to shorten it so I don't have to do like vm. keap doet every single time I'm just doing keymap is equal to vm. keap doset so this keymap becomes the function and then we have an options uh uh table here right I'm not sure if these are automatically set like this I'm pretty sure silence false I can't remember but anyway these are just options that I set um in the future I I may you know update this but you know I know that this works so now to create a key map we're just going to say like okay uh we say the mode and I've seen again and people will do this in a more complicated way right like they'll write like particular functions for like like for instance you could write like a function called n map and then like it could automatically put like a n here right and then like whatever command you get so that way you don't have to like always put n um but I like to keep my config just pretty like I they have this a concept of like grug programming or something like that and I like to keep it at like that level like I like to keep it really simple so even if I'm breaking dry right like even if I'm breaking this don't repeat yourself principle like I just don't I don't really give a right so we have keymap and so for instance this one we're just setting space um as I don't even know what this is doing to be quite honest I guess it's just setting it as nothing just because um whenever I try to set the local leader to space like I think this helps it kind like I think I set it to a noop before um just because there was some wonkiness but anyway these three lines is how I set the leader key to space you'll also notice that I'm like mapping like control I to control I there's like a reason for that I can't remember exactly what the reason is uh that this is like a necessity but I know that um if you you may not know this and maybe like Terminals and neovim are better about it these days I don't know but like you may have dealt with control I and tab actually being the same key inside of neovim so for instance if you map control I to something which you shouldn't do you should leave control ey just the way that it is uh so that you can move between like that you know that uh jump stack call stack whatever but um if you map like tab to something it'll also map control I to it okay so this is something that I do I I'm not 100% sure that it's necessary but I remember reading this somewhere it used to be necessary I don't know if it's still necessary this is just better window navigation so if I do something like VSS split right and I want to move between these two windows like right now I have to do like contrl w and then H and I have to do control W and then like L to move between them and instead of that I'm just going to be able to do like um alt alt H and L to move left and right and K and J to move up and down and then I don't know what that is oh uh then I have like alt tab which will allow me to just if you press a control 6 I think it is no alternate file you know what I can't really remember exactly what that does then I thought that that just swap me between Windows but I guess it swaps you between files or something I don't know whatever um I do have that keymap there one that is nice is centering so imagine that I'm doing like a search here and I'm searching for like Ops hops like this and like you can see like when I'm searching right like if I go all the way to the the bottom that it's not centering that so what you'll notice that this will do like this key map over here it will um give us the ability to like you know um Center every single time we search so that I'm not stuck on the bottom when I'm looking for something that's outside of like my viewport here right uh you'll see what I mean when when I save and reload this uh same with star same with hashtag if you don't know um star and hashtag like if I do like star on N here like it'll just highlight all the ends and it'll actually jump to the next end and then like hashtag would be in the opposite so it'll just like as I'm pressing n I'm actually moving up and if I do star I'm moving down through these searches it'll just select the word and automatically search for it same with gar same with that stuff um this stays in indent mode and visual mode so in in this case we're doing a key map in visual mode and then I'm just going going to do like this press over right now what that does is it immediately kicks me out of like that visual mode so instead of that I remap it to um you know that that angle bracket and then uh GV so that that way it leaves me in the mode so I can like continue to uh indent if I you know if I want to and then I would like have to escape to get out of that this is an interesting one um so imagine that I C so so like this is annoying for me right so imagine that I'm going to copy keymap here right and then I'm going to come down here and I'm like okay I want to change Vim to keymap and I paste over top of it okay now imagine that I want to change command to keymap oh what's in my register oh it's Vim right because when I actually when I did this when I yanked this okay that's in the register then I paste it over top of Vim okay you might still think that keymap is going to be pasted next but actually it got changed out for uh right there I just I actually I accidentally did something else but actually it it got changed out for Vim see so what this allows us to do is to kind of uh it gives us the ability to hold on to the thing that we copied after pasting over top of something else that way that the whatever we past over top of doesn't become the new thing that's sitting in the register that's going to be pasted next this is like a really annoying thing for me um probably a lot of people have experienced this I can't imagine nobody's else is annoyed by this this is how you fix it um if you're one of the people who's been extremely annoyed by that in the past then you know you're welcome uh all right so this is this is again this is like the mouse menu so if you double click you know you got paste and select all here which is like I can't IM like they even put like how to disable Mouse but um you know I what I do is I like give you the ability to go to definition and look for references I guess I don't know I never use it but this is kind of just if you ever did want to use it this is how you would do it uh right Mouse Papa I don't know I don't know why that's useful yeah you probably ignore those this is good stuff uh yeah so I really like this one what this allows me to do so right now if you want to move to the end of a line you have to do uh you can do something well you could do um dollar sign moves you to the end of the line if you want to move to the beginning of a line then you and this isn't like the beginning of like the whole line right like because that would be so if we do dollar sign here and then I do zero that brings me all the way there right but if I do dollar sign and then I do um like the the carrot the carrot brings me to the beginning of this line right so very often I want to move like like I want to like grab this entire chunk here right and so I would do something like V and then I would do a dollar sign right and then that would like grab me the whole thing I guess plus this a little extra space there um but I don't like pressing carrot and dollar sign those are like difficult keys for me to kind of like pre like it would just be easier if I didn't have to press them so the way that I like to do this instead is I like to do shift and then H will jump me all the way to the beginning and shift and L will jump me to the all the way to the end of a line and so you can do G underscore so if I do like G underscore that will do that like it'll bring me to the end of the actual line because you solve dollar sign actually before it kind of brought me like one space over um I I just know Gore it behaves a little bit more like how I would expect so anyway that's what those are going to do um oh yeah these are some utilities to help you with Tailwind but also like uh you might you might like this stuff even if you're not using Tailwind but if you're using Tailwind later on in this video I will show you how to make your life with Tailwind like a million times easier okay so you can pay attention to these guys here I also have a key map here that if you press leader W it just sets wrap and so what wrap will do um you probably know what wrap does does but like okay now everything's bigger you're noticing these lines aren't wrapping if I do like set wrap okay now the lines are wrapping right and if I do like set no wrap now they're not wrapping and so what this will do is we'll just set not whatever it already is for the particular window that you're in all right and this is what is this I okay what this does is in a terminal it is escapes and I'll show you why that's useful later on but I press control semicolon and it escapes me when I'm in a terminal so it puts me in like normal mode inside of a terminal uh because if you don't do that then you have to do control back slash and then contrl n to go into normal mode in a terminal so I like to just press control semicolon when I'm in a terminal context instead okay so those are our keys and we're just going to require those keys now so I'm do require and I'll do H user. key maps I think we called it okay so now if I do something like if you remember if I want to jump to the end of the line I can do contrl L if I want to jump to the beginning I can do control h if I have a split here and I want to move between the splits I can easily move between the splits uh if I do like a split like this you know I can like kind of move very easily which is nice uh to move between Windows um and yeah so all the other commands you know they're all there uh like also that one where I was telling you that like you want to be able to indent multiple times see so I like that too okay now the interesting stuff so now what I'm going to do uh is I can't jump to the bottom here okay so the next thing we're going to do is we're actually going to add lazy lazy is going to be our package manager um so I'm look for lazy here and I'm not gonna find it for some reason okay let's do L user oh I know why because it's looking in a different it's looking like in that other folder it's like it it thinks it's still in that context because I moved this which is like it kind of sucks oh well we're going to lose we're going to lose all the cool stuff there so let's go to config mm. old here and now let's do uh let's open this up let's go take a look at Lazy okay and so what I'm going to do is I'm just going to grab all all of this stuff and then I'll explain what it does um I'm going to leave the witch key stuff if you already know what wit key is then that's great but if you don't then I'll explain that later so now let's do en in it. Lua then let's do a require statement here for uh user. La okay do e uh Lua user we're going to create a file called lazy. all right now what this is going to do is it's going to essentially what it's going to do is it's going to check if lazy's in your path and if it isn't then it's going to clone it for you um and it's going to use the stable Branch uh it's going to add this to your RTP stands for runtime path so the lazy path uh which is this is going to be added to your runtime path so everything in your standard path and we probably should just quickly talk about this because this is going to be a long video so I might as well just cram as much information in here as I can uh for people who are interested so when we look at vm. fn. standard path and then we pass it like data here um because what this is really doing is it's really doing this right like this syntax is a little little wonky but what this is doing is it's doing that and then we're appending this right and so what that actually is um and if you don't know like the dot dot is like a it's string concatenation in Lowa so what this is doing is like data like this standard data path like where the hell is that like what does data mean like I don't know like that that might confuse you if you don't know um so let me do this really quick just going to open up a terminal here to show you so if we go tocal share that's it that is the data path in in um in neovim so if I do something like this if I do something like uh we'll do Lua and we'll do print and we'll do vm. fn. STD path and then we'll pass it data like that see so you see what it came up with it came up with users um my username on this machine is cam cam or it's like an acronym for Chris at machine and then we got local share and Vim okay and so actually it's not just loal share it's loal share MVM so Vim fn. STD path and when you pass it data that's going to return back to you local share envm so what if we pass it something different another standard path if you will here right so we can pass it config and the standard path for the config ISC config and maybe I think state is another one so we'll pass it state where is your State located it's in loal state EnV and lastly kind of just to even this all out we'll do cash and where is all your cash stuff located for neovim it's undercash envm okay so this what we're doing then um if you remember for the data we're saying okay I want to add this to the standard path I want to add users cam. local share uh SL laaz la. envm I want to add that to the runtime path so we're going to preen that to the runtime path now why are we doing that I'm not going to explain that right now um but maybe hopefully this makes a little bit more sense so you're not just copy and pasting you're like you know you're not completely clueless as to what this is doing I mean clearly you can kind of see that we're also like we're running a little system command here to clone lazy down um now the next thing we're going to do is I'm going to require lazy and remember that function that we wrote so if we do Lex Lex here that function that we wrote in launch okay so it says lazy plugin spec all right and so I'm saying that the specs provided for lazy are going to be stored within that uh within that Global variable okay and so that's why I uppercased it here so it is accessible to me here so I'm going to pass all of my specs to Lazy in one Global variable there um then for their install thing I guess you know if you have a if you have like a color scheme there's some like weirdness when you install things but like if you have a color like a preferred color scheme if it's available you can use that um I use the dark plus color scheme that I kind of developed and then if I don't have that one available to me I use default I pass it uh rounded border for the UI cuz I like that and then change detection uh notifications this is one of the things like in um lazy uh lazy Vim that I don't like is that I find it like a little bit noisy like I I don't like too many notifications right so I I turned that off there all right and that's basically it so now if we go up here you like this go in it some sort of stupid problem somewhere I don't know where but let's you know let's see if that's going to proess no all right so that didn't do anything but that's because I already have lazy available so what I'm going to do is I'm going to go blow away all my plugins so I'm going to go local share enm and I'm gonna blow away lazy so this going to blow away all the plugins that I have in there and everything else and I'm going to restart the of him and now what it's doing is I don't really gave me a big black screen for some reason and I don't really know why but I know what that screen represented what it represented was it was installing lazy I don't know why it was just a big stupid black screen but that's that's what we got so now if I go to envm and now lazy's there you saw I just blew it away but now it's there and then also the lazy Vim um uh plugin is available to us there and you can see that we are on the stable branch of lazy. envm now also lazy. envm is a plug-in manager lazy Vim is a neovim distribution kind of thing like lunar Vim or like Envy chat or something so lazy. envm is just a plug-in manager they just have similar names okay um so okay so now we have launched set up like just this little function that I have and you'll see why it's useful we have our option we have our key maps and now we also have lazy setup so now we can actually start installing some plugins um hopefully people are still kind of following along uh I don't know how many I don't know how to see how many people are watching but whatever so now what we're going to do is we're going to we're going to take a look at I don't know like what plugins should we install first CU I'm going to go through a lot of plugins I'm going to show you a lot of weird that you can do that probably didn't even know you could do um just like weird plugins and weird stuff so let's go oh yeah let's go take a why is it that I have to whatever okay a good first one would probably be a color scheme but before we do the color scheme the last thing I'm going to do is I'm just going to add um well maybe we'll hold on the auto uh okay let's add the auto commands and we'll talk about Auto commands we'll get it out of the way it's you know it's not the most exciting stuff but uh well actually some of the auto commands depend on some plugins so I'll probably get errors if I do that so okay let's just start with the color scheme after I add a few base plugins then then we'll go over autoc commands how they work and like um what Auto commands I personally set that makes my life easier and you know the stuff that I like so what I'm going to do now is I'm going to go to the color scheme file that I have in here okay so I'm just going to copy this oh that's not what I expected it to be um but that's fine we'll change it around all right so require and then we're going to do this and we're going to do not that uh I'm not I'm not used to not having like Auto um Auto pairs I think it is uh not key maps uh color scheme okay so now we're going to require user. color scheme and do well we'll just do e uh Lua user and then we'll do color scheme I think that's how you spell it all right and so instead of lunar Vim primer I'm actually going to be using a different color scheme called dark plus um I'm not going to pin it to a particular Commit This is you do lazy false uh this is to make sure that it loads on Startup um we're going to set priority to 1,000 uh this is just so that it loads before all the other plugins start which is you know you want to see your color scheme like right away you don't want to like see a flash of some other color scheme so like the first thing you want to happen is you want to have your color scheme load um and so now what I do is I'm just going to change this and we're going to do uh dark plus like that okay so this is going to be the first time you're going to look at a file that looks like this but this right here is how this entire config is set up it's what makes it so modular it's what makes it so easy to use and it's what it's it's going to make your life really simple if you can just figure out this pattern now this is the pattern that like I use but this at the end end of the day is just returning like a lazy spec right something you could imagine to be a lazy spec and really all a lazy spec is in in my mind is something that has a few properties one of them is the as a string value and if you have a string value like this then it's going to treat that as a plugin so it's going to go and try and clone this right so this is like looking for a like a GitHub user organization and then a repository so it's going to clone this then you have some other properties on this right um the other properties are things like lazy or like um some event that you could loaded on or a priority or like you could set like a commit there and you could set a particular commit hash so that you could pin a repository to a particular commit hash that you know doesn't have bugs or something like that right uh for now we're just going to use these ones but you'll see that I'm going to pass different Keys up here uh depending on the context and like what kind of plugin I'm going to be installing the next thing I'm going to do is I'm going to define a function that's also going to be hanging off this little M object here um and it's going to be called config and it has to be called config because lazy is expecting um this as a particular function that it's going to run every single time to set up this particular plugin so when it goes to set up the dark Plus plugin it's going to run this config here and then it's going to just run whatever codes inside of it uh so all I wanted to do is I just wanted to do vm. D color scheme and set it equal to dark Plus or whatever the name of your color scheme is right so you just pull in whatever repository has your color scheme here set the name there that's basically it so now I'm going to save that reopen this and it didn't install anything so let's do maybe like lazy like this and let's do maybe install I don't know or maybe update okay didn't seem to do anything oh so this is this is where I first messed up okay that function that we defined in in this launch file uh we're going to use that this is this is these are the only ones we're really going to be using require for and then we're going to be using require for this and you'll see how this kind of works out later so now I'm actually going to do spec okay there we go now every single time that I want to add a plugin I just say spec that's it so if I want to add if I want to add another plugin I just go spec I pass it some argument like user Dot and let's see what plugin we're going to be doing next let me go back to that in it file here the next one we're going to be doing is Dev icons right and so we'll do Dev icons so we'll go take a look at what's in that spec and you can see it's like the same thing it's local M it's an object what's it got it's got a plugin it's got a plugin right there um we have a new thing called an event and this is an event so if we go to Lazy lazy. envm here and we look at some of the things we can pass it like these are all the different things like the different properties we can pass it if we look at event right this is a lazy load on some particular event so events can be specified as buff enter or a pattern like buff henter star Lua like if you want to only load this when you open like a Lua file or something like this so these are going to be for like events and so maybe when we go over Auto command you might get a better understanding of what an event is but um if you go down and look down here they have some special events for lazy Vim or for lazy do Vim not lazy Vim um and let's see here it's a long read me and I think I must have scrolled past it oh here we go user events so one of them would be like very lazy right and so that event what like when does this thing trigger it triggers after lazy done and processing the Vim enter Auto commands so this happens after the Vim enter event which would all of the Vim enter Auto commands right again if you don't understand what that means that's totally fine you probably don't really need to know what any of that means um autoc commands I kind of see as like a more advanced topic so um but it's all right I mean I'm going to go over them in this in this in this stream anyway so anyway okay we got user. color scheme we're going do Dev icons okay and we do Lex do Lua use user well I don't really need to do it this way let's do it like this let's do e Lua user and we're going to do Dev div icons. Lua okay and so what this is going to do is it's just going to give us a bunch of cool icons for things like Lu align for um file extensions for all kinds of stuff it's just a better experience when you have icons it's so easy to add icons everything just it just automatically works when you add this plugin so it's like why not add it right um you could ignore this here this is something I'm doing like in particular for Astro just because there's not one automatically set for that so let's let's make this as simple as possible um I don't add the plugins until that very lazy event now you'll see people out there just as kind of a side note you'll see people who are like obsessed with like how fast they plugging can or their config can like initially load um there's some Merit to like lazy loading some stuff uh lazy loading is like it's not really that important so like anytime you see things like a vent here like it's it's really not that big of a deal you are if if you're sure that this is going to like be fine then you can do it and you'll probably get some like marginal startup time Improvement um but there's also a lot of foot guns that that you can run into here too like trust me there's some plugins where if you you think you can lazy load it like on insert enter or something like this and um and then some weirdness is just going to happen in your config something's just not going to behave quite right and that's probably you like then you're going to go on this quest to find out you know which one of your stupid uh lazy load events is is is the culprit um so some of them if like a plug-in Creator like recommends you do it this particular way or if it's like an inconsequential thing or seemingly inconsequential thing like Dev icons then you probably can get away with like passing in an event like this um but you know just be wary of these um if this doesn't make sense to you you can always just remove it and get rid of it but you know it's it's not going to really do a lot of harm here uh so the next thing we're going to do we can just like totally ignore that there and so we're just again it's going to be the same thing we create this m m stands for module by the way it's just doesn't have to be called M we could call this like Dev icons right and then we could like change this to Dev Dev icons and we could change uh this to Dev icons uh we could just change it to like d we could change it to whatever right but m is just like the way most people do this you just use a capital m and then you kind of like you know you add properties to it you add a function on it and then you return it like that's it and it's it's a way for me to look through any particular file and just see like a a certain level of consistency so that's why I just use this and when I'm looking through other people's configs or even when I'm reading through plug-in code or something like that like m is just like it's just something I'm used to so you'll see that all over the place and if you were wondering that's that's the reason I'm using it so name of the plugin and MVM tree owns this I didn't realize that MVM tree owned this this particular plugin but anyway envm tree envm web dev icons uh we'll do it again on this very lazy event then we have a config and all we're going to do is we're just going to require it and then we just return that M and so this is a valid lazy spec so we're going to save that we'll jump back and by the way you can jump forward and backward very easily with controll O and control I so maybe you already know that maybe you don't but you can do that so we got user. deev icons you can see how it automatically installs with the spec keyword because lazy Vim is just kind of set up to do that and there we go now we have that installed um You probably won't see anything too interesting yet with it but yeah it's there now the next thing we'll do and I plan to take this video as far as like all the way to like testing so by the end of this you're going to have a neovim config that can that you can like uh run unit tests with and you'll have LSP and you'll have all that kind of good stuff but again it's going to be a long it's going to be a long trip to get there so now let's do the next one treeit sitter so tree sitter is another kind of interesting plugin um someone has a good video on tree sitter I think it's uh Vero forget how I don't really know how to say his name Vero tree tree sitter um I don't know I he's you you'll know it's the right video he has like a tomato for a for a username or no not for a username for a profile picture on YouTube go to YouTube really quick okay let me pull this over here for you okay so if you're interested and you want to learn more about like kind of what treesitter is you want to get like a good introduction um you can go take a look at this video here by V Vero okay um and I'll explain what it is for practical purposes but that video will explain what it is like a little bit more in depth if you're interested so now let's go to we'll go to L again we'll go to user and we're going to look for tree sitter okay now this is more complicated than it needs to be so I'm going to simplify this and again I'm going to upload all of this code too at the end so you'll you'll have it so again we're just going to add another spec we're going to do a user. treeit sitter and it it gets better the reason I'm doing this spec thing right it gets better so let's talk about one one reason to why I really like this spec thing right before we get started with Tre Setter imagine that I want to com like imagine something's going wrong with my with my config right or if I just want to like like get rid of a particular plugin completely so I don't want it to like get loaded at all so what I can do is I can just comment it out all right open this up there you go my color scheme's going right so it's got an error there the error is that it's trying to pull in treesitter that doesn't exist so like if I go back in here let me just get rid of that really quick but like if I open this up now the color scheme's gone right so one reason that I really like this spec thing is because now in one file I know all of my plugins or sometimes you'll put multiple plugins in one spec if you're you know that kind of person but um but you know if you want to just have one by one plugin and then maybe you want to comment out a plugin to like you like ah you know maybe this is bloating up my config a little bit too much or you're like ah maybe I want to use a different color scheme or I want to try out different plugin and I want to turn it off later and I want to do this kind of thing well all you have to do is you just comment it out right so that's the first benefit of using this this little spec function this little spec utility function we created earlier on um but you'll see another benefit later when we when we set up the language server stuff so now we're going to do L not Lua we're going to do e Lua user we we do tree sitter. Lua okay and we're going to jump back over here I'm going to copy this I'm going to get rid of a bunch of stuff from this file though so ignore all this for a minute here uh so we're going to not use this for now we're not going to use any of these dependencies for now I don't think yeah we're going to ignore all those dependencies uh we're going to get rid of the commit we'll leave the event but again remember watch out for these and then what I'm going to do is I'm going to get rid of this and this this is like bad practice this stuff that I have in here now this is like not how you want to do this get rid of the text objects get rid of this and once I get rid of all this stuff it should begin to look a little bit more familiar okay okay so this is our basic tree sitter setup okay this is the these are the initial properties we're going to set so the first one is going to be the name of the plugin the next one is going to be the event uh the events that it's going to fire on so when you read a new uh when you read it like after you read a new buffer or when a new file is created uh that's when it's going to run I guess and then we have a build step here too a build step is something that after your plugin um is installed I want to run this command afterwards right so right now we don't have this command but it's kind of like okay imagine that I just installed this and then I ran TS update right we don't have that Command right now but like the second I install this it's going to run that okay now this is going to be so the next thing we're going to do is we're going to do require envm treesitter doc configs do setup uh and you can go to the envm treesitter repository so I and like probably the easiest way to would just be to like go up here just grab that name of the repository pasted in there okay and so you can figure out like all the config steps and whatever else like you can you can you know read about it in this repository but you know this is it's it's probably just simpler just to take a look here at what I have um but again I I got this just from the config so we have insured installed so this is just going to make sure that some particular languages are automatically supported by Tre Setter so we have Lua we have markdown we have markdown inline we have bash and we have python those are the ones I want so if you're a c developer you're going come in here you're put the C right if you're a um I don't know JavaScript developer but JavaScript right like you're going to put that kind of stuff in here these are the ones that I just automatically have I probably should add some more but that's that's what I got um ignore install so you could also ignore some too so if it's I don't know if if it's some use case that you have for instance you can like ignore hasal or something like that right uh sync install actually I'm not 100% sure what this does um let's jump over to the docs really quick I'll take a look so do sync install so this automatically false so I don't even really need to pass this but installs parser synchronously okay so I don't really know what the benefit to that would be but if you want to install things synchronously then you can do that I'm just going to get rid of those just so all this looks a little bit simpler now I have highlight uh markdown gave me issues before but actually doesn't anymore um so I'm just going to get rid of that too and so inside of highlight I'm going to enable that so you can already see that we have some basic syntax highlighting right now right so we got like you know strings are orange and fun this function keyword here is yellow for some reason and uh um you know uh booleans or this blue color so so we have some basic syntax here but this is this is Rex highlighting so if we do something like inspect this is the Highlight groups for this particular thing so right now true is a Lua constant right via well it links to the constant uh highlight group so this is how Rex highlighting is is handling things Rex highlighting is slower than the way the tree sitter does things um as far as I understand and it's not as complete so once I install this you're going to notice that these Lua files are going to look a lot better um you can also in addition to treesitter with the highlights and Tre sitter does other things but I'm just going to go over highlights cuz functionally that's that's probably why you want to install Tre Setter that and like some indentation stuff but um but so okay you you can also keep some of this Rex highlighting so if tree sitter didn't have some sort of particular highlight group that the Rex highlighting did have then you would still get that highlight um I would set it to false just for performance reasons and the fact that tree Setter probably is you know already good enough now I think this is false by default so if we go take a look see it's false by default so you can set it to true if you really want that and we we'll just ignore it um I'm not sure if yeah highlight is also True by default so we probably could also just kind of like Get rid of that and we'll see about indent too because I just want this to be simple when you're looking at it indent yeah apparently it's an experiment Al feature I usually set it so I'm going to leave that in there all right so I'm going to save this lazy's going to do its thing it's going to install my plugin and now it's going to actually install these parsers okay so I just installed five parsers for me and I may need to like actually reload this file why would it not be set up uh one second let me think about this inspect really yeah okay so we're it doesn't seem to be working if I do lazy do I have L installed TS install L uninstalling yeah whatever uh let me think about this why would this not be working and this is actually useful anyway probably for some people who want to like debug this stuff when it goes wrong I guess cuz I got rid of highlight I guess maybe you do need to pass highlight that's my first guess I'll do that there it is yeah that's what it was interesting okay I thought it was automatically like that it's not so there you go that that was the issue so you do need to enable you do need to explicitly enable syntax highlighting but now all right look see this is a little bit better so now we look at this require um it is it's yellow that's the that's because it's a function if I go to um go to E L user tree sitter look how much better that looks see we got these nice green comments here we got um we just get rid of that anyway though and we got again the strings are still highlighted the same but you can see that you know if you're familiar with the dark plus syntax highlighting it it just looks a lot better right um keywords are highlighted appropriately functions are all highlighted consistently and everything else looks good so there we go now also we can run the inspect and we can actually see like if you're in the business you want to create like a color scheme like I created this one here uh inspect is going to be your friend so you could get really really you know fine grained and look at some of these highlight groups so you could like set like at keyword. return. Lua like if I set that to be like green then all the returns and Lua would be green um or we can just link it to something like include and then it's just going to be linked to some other highlight group um but yeah so you know we can run this on all of them like I I guarantee like if we take a look at require it's going to be something that's probably linked to the function highlight group yeah you say so function. built-in. Lua is links to function right the function highlight group so there you go so spec keyword kind of cool um something to know about all right now uh what's next what should we do next next we will do I don't know why I keep doing you know what I should have like two of these open like duplicate this tab and then come over here and I'll leave the in it.a open so we just take a look all right Mason so this is where things are getting a little bit more interesting because we're going to start setting up the language server stuff so this is um and I really want to make sure that you have an understanding of what Mason does of what LSP config does and why I like to do things this way uh I don't really like to use any abstractions on top of like the LSP stuff any anything more than just LSP config LSP config gives me the right level of control that I want over my language server uh Mason is a good way to install binaries um or language servers and stuff like that but that's really all Mason does so just really quick Mason allows us to install things like a language server or a formatter so if you're familiar with um formatters something like prettier is is a formatter if you're familiar with something like a linter es lint is a linter eslint also there is a language server for eslint if if you're familiar with like python then you know maybe pyite is a language server you know TS server typescript language server is a language server H Lu LS is a language server so all those language servers and I think even debug adapters I think can be installed with this um uh formatters linters all that kind of good stuff we're just going to install them and put them on our path with Mason that's it Mason doesn't do anything else besides that and then we're actually going to do all of the configuration with LSP config but let's start with Mason so that we actually have the ability to install some language servers so now let's jump over here take a look at Mason and you can see it's the same kind of thing right uh we have local M this really doesn't need to be there we'll we'll change that and then we just have our config and then we just return them right so let's go through this oops let's do this and we're do spec again and we're gon do user. Mason okay e Lua user mason. Lua okay now this servers thing I think I actually do use this so that I can keep all the servers maybe consistent across uh LSP config in here but I don't think I should do that I think I I really like to just encapsulate everything in one place so let's just do like this and then let's uh let's do like that and we'll just go two over or maybe one over yeah and so now we'll do that okay and so that's our function so again let's take a look at this I'm going to get rid of the commit what we're going to do is we're going to install this plugin it's going to be called Mason lspc config envm um and this is going to its dependencies are going to be Mason and plener so actually I don't even know if we really need that I guess it just ensures that they're installed let's go take a look at these see what it really provides because I was pretty sure that all it did was just put binaries in the path and I'm pretty sure that's what this is doing Mason LSP config Bridges Mason with LSP config okay making it easy to use both plugins together so if you go take a look we got Mason Mason LSP config and then MVM LSB config it's important that you set up the plugins in the following order I guess you know do it that way so that's fine so we'll set up Mason then we'll set up Mason LSP config and then we can ensure some particular servers are installed there really aren't that many configuration options here so that that's really all it is the whole concept really here is that we can ensure that there are some language servers installed in our path and I I'll show you what that looks like so I'm going to automatically install the names of a couple language servers that I know um the way that I'm going to reference them is by the names like they're they're kind of like binary name right um or you you'll see you you'll you'll know you'll know what to call these uh and you you'll see you'll see what I mean soon so a couple that I automatically install I'm going to get rid of some because just some of them I just I would want some simple ones so we'll get rid of like that um get rid of Tailwind for now we have yaml LS Jon I I just want something like really simple for people to use like something that you know is going to work for like most people so again let's go over this we're installing mason. config here's a New Concept with uh lazy so the concept is dependencies so this plugin depends on these plugins being installed so we're only going to set up the config if these plugins are installed so that's why we have this dependencies table here so you can just see that um we're going to depend on Mason and we're going to depend on plener now it didn't look like plener was something that it did depend on or maybe I missed it so I don't really know if that's necessary so we may be able to get away with not putting plener in here um so let's do that all right so these are the dependencies for this and then we have function config again we're going to automatically install these servers so you can see insure installed is equal to M do servers I'm going to get rid of that m dot there okay so servers which is right there and then also I like the the rounded border so when we actually open Mason to install stuff I like to see the rounded border so let's save this we open our config we're automatically going to install Mason lspc config envm and also mason. envm now I would assume that it would automatically be installing those servers but I don't know let's go take a look so we're going to enter the command called Mason here all right oh I already have these installed that's the idea so that's that's how come they're they're already here if I got rid of these like the ones that it's looking for for instance Lu LS let's get rid of that one right we'll reopen this and then look it's installing L LS and it was automatically installed so the reason that it was automatically installed is because we have that insure installed uh function there so I'm going to reopen Mason and a couple cool things we can do and you should do this pretty often right so if you have Mason installed you know language servers get updated so when you install a language server you kind of want to open Mason sometimes and go and update your language servers so we're going to open Mason you know again just with that Mason command here and we're just going to do like you to update things you see the ones that have new versions it tells you which ones have new versions so like The Bash language server has a new version so we're going to go through we're going to update that what I'm doing is I'm just hovering over it and I'm pressing U okay and that updates it update prettier update pyite Prisma and we'll update the type script language server all right and now it's going to tell us that these are all up to date and good it highlights the ones in blue with the ones that I just updated um and now these ones are all available so these are like all the available different language servers that we have here one that I like uh if you're doing like like do I already have es installed yeah I already have es LSP installed um trying to think of one that I don't have installed that could be in here uh and this is everything by the way so okay there's a couple different things that Mason handles Mason handles and we can look at all we can look at language servers debug adapters linters and formatters um you might not be familiar with you're probably not familiar with debug adapters for most people out there and we'll we'll go over them later um you might be familiar with linters if you're familiar with linters the linters you're probably well let's open it up the linters you're probably familiar with are like es lint right um then maybe like uh Auto is it I think or flake flake8 is another one that you might be familiar with for python right so imagine that we want to in install this particular linter we press I on top of it okay and now that that linter is installed it's not necessarily set up but it is installed and we'll talk about how to actually make it so that flake 8 will actually be running uh on your code in the future um so okay those are linters formatters you know like prettier maybe black is one you might know uh that's like a python one so if we press on top of that there you go we're installing black there you go now this is just installing a bunch of binaries for us so where I think it's putting them is if we go to local share and we go to en and we go to Mason here's where they all are so now we go to Ben there you go that's that's where they all are these language servers are and linter and formatters and all these things are just binaries at the end of the day so like if I can come in here and and these are all Sim length but you know forget that for a minute um we got prettier and so if I run prettier it's going to be like all right like it's literally just the actual preter command is here and we're going to I I'll show you how to set that up later with a plugin called non LS so all right let's keep it let's keep it pushing here so what we'll do is now I'm going to install another one called schema store you can skip this one if you want to um but I am going to include it because it makes my life a lot easier uh you can notice that we don't actually have to put these parentheses um I've just been putting them because I don't know I just have been um not a big deal when we go to format things in the future you'll notice that everything will have the same consistent formatting but for now whatever you actually don't need that in Lua and we can just pass the string to spec like like this without the parentheses so okay we're going to include user. schema store so I'm going to go over to schema store and again this one's really simple we just going to say lazy is equal to True uh we just have boo schema store there there's no config that's important so you could just leave this out I just put it in there just in case I do want to add a config or something like that in the future um but yeah that's you know super simple so we're going do e we do Lua user we do schema schema store. Lua like that save it'll install it for us this will be useful later right now it's not necessarily useful this is going to give us uh Json schemas and I think yaml schemas so if you're opening things like GitHub actions uh yaml files you'll automatically have autocomplete for particular keys if you're opening up if you're a web developer you got like a package.json um you'll automatically have keys for you there but like all different kinds of any any Json any standard Json like file like configuration file you might using it likely has a schema and so that schema is going to allow you to like um get autocomplete for for common you know like how do I put this like if I open let me go open one up and kind of see what I mean so if I go to repos here if I go to we go to uh I don't know got like a project web developer project project here we go resolvers one open up the package I hate when it does that uh Json here yeah so you see I got version here see how I'm typing version I'm not getting any autocomplete once we set up the language server stuff because we have the schema store I'm going to get autocomplete and so we'll return to that when we have that set up so all right that's the schema store now we're going to do LSP config this is like the meat of your language server e Lua user LSP config.lua okay now let's go over here LSP config.lua we're just going to copy this file again I'm going to explain it all but I'm not going to type all this out uh so all right we're gonna get rid of that I am gonna keep neev as a dependency here and I actually want to see if uh plener is a thing that is required so we're going to look up LSP config neovim and I'm just going to take a look at this plugin does it rely on plener looks like it doesn't okay so yeah so you can read through this I'm going to go through the stuff that I have set up um Neo Dev is very useful Neo Dev is going to allow us to get thing like completions for things like um Vim do fn. whatever vm. API do blah blah blah right so Neo Dev is good for that it also actually is going to give us the ability to um to index particular files and stuff like that within plugins so when you're going to like pass like um like a like a property or something like that to a plugin it will make your editor aware of what's available and I I'll show some of that stuff later so anyway again same same story for the most part I'm adding an extra couple functions here they're not super important but they are here um but you know I'm just going to scroll through this you can take a look you'll see how complicated it is but now I'm going to go through and I'm going to break it down so we have local m m is again it's the same thing so we just got to put our the name of our plugin here we have an event um when we're going to load this this stuff and then we have some dependencies here and again Neo Dev is just something that's going to be useful for us when we're like working on our config and stuff all right so I got another function here it doesn't really need to be a function uh like I could inline this all inside of this onattach function here and then you know I can do that further but I break it out into its own little function called LSP key maps and we're setting all of these key maps here because we only want it to be set up for the buffers where the language server is active because we don't want to like try and do like LSP buff. hover if there's no active language server so that's what we're doing here again similar stuff um we're just going to use Ops we're going to set keymap is equal to vm. api. MVM buff set keymap so this just sets the keymap for that particular buffer and yeah that's basically it you know uh we this buffer number here this is our argument to this function right um and so whatever buffer number is active we're going to set this key map in that particular buffer again this is something you can basically copy and paste you don't have to think too hard about it um we have an onattach function this is this function we're going to pass this function later but this function runs every single time that the language server attaches and what I mean by attaches really at the end of the day is just like the language server has started up and it's aware of your code all right and that's basically all that means so it's started up and it's like reading your file here so then then this is going to run this function here um and all that's going to do is just going to set up my key maps now we have another thing called common capabilities um and I'm going to show you some cool stuff you can do with common capabilities later on like things like inlay hints um but for now you can see that uh we're just setting up CMP envm LSP this is going to be useful when we have CMP MVM LSP installed but right now we don't we don't have cm m p installed but I I'll show you in the future when we get that installed why this is kind of useful um again we're just going to set the default capabilities there now this this whole chunk here um this is not like something I came up with and wrote or anything like that I mean the the putting in a protected call is something that like I'm doing here um and that's like I'm not going to go over that right now but like this is basically just requiring it but doing it so that if it errors out it doesn't like break my config uh but what we have here is so if we go to CMP uh Neo this is just like the recommended way to do it so where is it yeah so set up LSP config local capabilities is equal to this stuff and then when Whenever you set up your language server you just want to pass this so this is where I got that line from this is not like something I came up with um so then we have our default capabilities here let's see you know I'm not even sure that I'm really oh yeah here here they go okay yeah so that this is where they're going to be returned as CMP mmore LSP and you know I'm not even sure I'm really adding them you can probably ignore this for now I if this does something I'm not even sure that it like is even really that important but whatever this one actually is important making the client capabilities turning on snippet support I'll go over Snippets later um again it's good to look through some of this stuff too and then just like it's good for me even like sometimes where I'm looking over this and I'm just like what the hell is this even doing but and then we're also going to set up um resolving support for properties here this I'm not 100% sure either where like I'm adding this stuff you know I'm kind of at the point now where it's like like where am I using this one second yeah not using it anywhere probably just toss it to be quite honest with you and this stuff here this completion item resolve support I'm not really sure why I have this to be quite honest with you so I'm probably just going to toss this too just to simplify this file further right like if I don't know what it does sometimes I like to just get rid of it and then if I'm like oh that cool feature is not working anymore what happened um then it's that you know so anyway so I we have capabilities text document completion completion all this nonsense basically this is just making sure that we have snippet support um we'll go over Snippets later some language servers have snippet support built in and if they do I want to turn it on in most cases so that's why that's there now we'll get to the actual config function this is what's going to run every single time that this is installed so we have uh local LSP config require LSP config so that's all that is um icons so let's uh let's do icons really fast because we don't have icons right now so we're going to do e uh Lua user icons. Lua now this is the way that I like to do icons so that I can keep all of my icons in one place um and that I don't have them littered all over my config and and all kinds of weird places you can use um there's like a plugin for this there's like a nerd icon plugin there's all these things but I like to just Define my own this is just the way that I do things um again you know you're free to not do things this way but this is what's easy for me so if I go down through here I should eventually see somewhere yeah here we go icons. Lua so what I do is I kind of just keep these all of these different icons under like a little like little name space here so like these are all the icons that are related to get these are all the icons that are related to like kinds and I'll get into kinds later too okay so like like a kind is like an array or a Boolean or a class or a color and all this kind of stuff and I'm using all of the vs code icons that are available in in the in nerd icons so like all of the vs code icons um they're called code icons they're all actually available inside of nerd icons at this point so that's you know I'm just kind of putting them here so you can see all those are there we'll kind of scroll down a little bit you can see these are like some G related icons that I have in here I would just copy this file over if I were you I wouldn't like try to like go rewrite this myself just it's not that it's like complicated as a file but it is like a really useful file to have because now instead of like trying to put like arrows in different places and whatever we just reference this file and we just said like give me a bold Arrow left icon give me a bug you know give me a bookmark give me a checked box here [Music] um these are called Chevrons that's like a thing too uh let's see you know like file icons oops sometimes if you put two spaces it'll actually like put the entire sized file sometimes that's useful sometimes it's better when they're small um but yeah so this this is is just a big file full of icons that I'm going to reference throughout my config these are going to be the useful ones for the language server stuff so this is going to be you know like um like errors and warnings and all that kind of good stuff and we got like a robot and a squirrel and like a smiley face and we'll go over why that's useful later so let me actually grab the ones that are so I have an updated config and. old L user icons I'm going to use the ones that are here okay now let's uh let's head back so had to do a quick detour there to install icons but now they're there um these are are servers so these are the servers we're automatically going to run again okay actually let me explain where I got these names from so if we do Mason really quick the names that you're going to want to reference are all here so if you look at Lua LS Jon LS HTML es Lin these are the names that you want to use you don't want to use the names on the left when you're referencing these so like CSS dlsp right you want to use CSS LS that's what you want to use for es- LSP you want to use eslint so that's what you want to do so I'm actually going to add eslint there because I do use that one I find it very useful um and it is actually really cool to be able to use eslint as a language server rather than just a linter because it just it provides you much more like real- time feedback so if if you are like a web developer I'm not really like I'm like a web developer as of like this year like I've gotten into like react and like typescript and all that kind of stuff um and eslin has made my life like much easier and better and using it as a language server rather than like as a linter has also made the experience much much better um but yeah so just this a quick side note uh so now we have default Diagnostics config so what is this big object here like what is what is this doing really all this is I just set this up so that I could set up some signs um and those signs are things that are going to sit in the gutter you'll see them in the future so like for instance if I got rid of this SE or this comma here I should see an error and I want to see like a big red X so that's that's what we're doing here that's like that's really all this is like this chunk here I hate virtual text so I turn virtual text off update and insert I don't know I have that set to false underlining things I have set to True sorting by severity is set to True some of the stuff is probably set to True by default uh the floating windows for the language server um basically I have this like I don't like to see the header or the prefix it's just kind of extra noise that I don't really need uh we we can take a look at that later focusable this is really cool cool it always should be focusable focusable makes searching for errors and stuff like that a lot easier I'll go over that in a little bit I like the minimal style and I like the borders to be rounded uh I'll go over like hopefully I'll remember to go over like why focusable is so cool for floating windows f. diagnostic doc config again we just pass that default diagnostic config so this whole thing right here we just pass it into there we Define some signs I want to make sure that when I hover the border is round I want to make sure that when I'm getting signature help the border is round and for the LSP UI stuff I also want the border to be round for that too so that's all I'm doing here I just want round borders okay next um this is a little complicated but it's a little Advanced but if you want fine fine grein control over your language servers then you need then you need to bite the bullet and you need to understand what's happening here um so what I'm doing hopefully you know I mean hopefully we have programmers in the audience and we can we can handle for Loops right so I'm just I'm just looping over that servers uh whoops let's go up here we got we got a got an array here right and it's just an array of servers so like Lu language server the CSS language server HTML language server the typescript language server blah blah blah right so we're going to Loop over that that that array and um what we're going to do is we're going to set up the options for it remember that we defined an onattach function earlier we're going to we're going to pass that on attach function and you remember that we defined some common capabilities earlier and we're going to we're actually going to pass those common capabilities now you will notice that onattach is passed as a function so we actually pass that function in and common capabilities we actually call the function and pass the results to capabilities so onattach takes a function capabilities takes you know a capabilities object that is returned uh from that from that common capabilities function so it's just something to be aware of if you do this you're going to screw up so don't do that and if you do this you're going to screw up so don't do that um now we're going to do another protected call and what this protected call is going to allow us to do is it's going to allow us to get fine grain control and access to our language server and I'll explain that in a little bit but basically what we're going to do is we're going to just for every single time that we we go through here we're going to check and see if we have some particular language server settings and if we do then I want you to load them and we see how we do this Ops vm. table deep extend here so basically we're we're taking whatever options might be in user. LSP settings do for instance Lu language server and if there is options there we're going to we're going to deep extend and then we're going to we're going to like use those we're going to use those options and hopefully I'll be able to explain better when I actually set that up and then also if the server is equal to Lu Ls I'm going to set up neev neev is a plugin provided by fola um again it just makes working on your config easier and then at the end of this we're going to just set up the the language server now if you don't care about doing the LSP you can get rid of this right if you don't care about Neo Dev you can get rid of that and then look how simple this is right and you could even you know you could even make this if you don't like this syntax there you want it to be like that you could like pass it in there and it's like a oneliner right so you just like a for Loop where we're just going to call LSP config on the server and we're just going to set it up right and if you don't care about all this other rounded stuff you know you can just delete all that and then it just you could have this be really minimal if you want but I'm going to show you like since I'm doing this I'm going to give you a walk through of all like the weird stuff that I know how to do in neovim I'm going to like show you how to do I'm going to show you how to do weird stuff I'm going to show you how to do everything you probably don't even know that you want to be able to do so like being able to set up like you probably don't even know that you can send or that you can you can you have like particular settings for a language server but you know you can do that so okay hopefully this makes sense hopefully hopefully that's helpful hopefully you can understand what I'm saying for new people they're probably like what the hell is going on um for some like people who are intermediate and they're trying to like really get to like that advanced like understanding they're probably like yes I want to see I want to see how you're doing that I want to know how to like pass fine grain controls to my language server um all right so now the next thing we're going to do and maybe we should just take a moment here uh so this is our in.a we're requiring again that function we have our options and key maps we're passing plugins as specs and then we require lazy all the way at the end here uh we're at the point where we're setting up our LSP config stuff if we go take a look at how this is all set up to LS here this Lazy Lock thing was generated by lazy we can ignore it um we have our in it. Lua we have a Lua folder all of our Lua code goes in the Lua folder okay everything is namespaced under user so that we don't have weird collisions all right and now these are all of our files all in the same directory if you want to get cute and you want to create like a core directory and you want to like you know uh you want to set this up with all kinds of cool directory paths and stuff like that that's great I don't really like to Nest things too much personally um I just like to throw it all in one place it's just easier for me uh so this this is just what it looks like this is It's hopefully isn't too complicated yet so now okay we're going to go into user I'm going to create another directory inside of here called LSP settings okay and LSP settings is where we're just going to dump different objects um for LSP settings and you'll see what I mean so let's go into there and we're going to actually we're g to every single time too we're going to name it after the language server so this one's going to be called lu. ls. Lua and then let's go take a look at what I what I do uh config and whoops dot dot do old and we're going to go into Lua user LSP settings all right and you can see that I have one for Jason LS I have one for CSS I have one for L LS so let's do L LS here all right and these are all of my particular settings that I like to pass to the Lua language server so a lot like you're always pretty much going to do this whenever you're doing it so you're going to do like a return and then you're going to do settings and then sometimes it'll be like the name of the uh language sometimes it'll be something else um but yeah so you kind of have to work with the actual language server so like if I do does that work yeah press GX and I don't know what that does is this it yeah let me open it up here okay so I have that like Link at the top so I like to whenever I do a settings like this I like to put the link to the settings at the top so then that way I can like go back and reference it in the future um so now if we go take a look let's like look through some of this stuff it's all with vs code because you know or I think it's with vs code maybe or maybe this is like sublime or something no that's vs code yeah anyway VSS code is kind of like the deao standard a lot of this stuff is based on vs code like standards that it introduced anyway um so okay let's go through some of this stuff and you can see see kind of where I'm where I'm coming up with this stuff cuz like you're you're taking a look at this and you're like you know what the hell is going on with all this like how did you come up with this object here because this object looks complicated so we have everything under Lua now I don't really know uh if it says to do like where it says to do that because sometimes it's kind of like a little bit confusing to figure that part out so if we go take a look at um this here I don't know if it necessarily says that we need to put it all under Lua but you can just rest assured that you do need to do that um so now if we go take a look at format so we'll go take a look at format uh let me jump because this probably going to be earlier on yeah here we go so we got format. enable right so if we want to translate that over to Lua so we're going to do format and then we're going to pass it another table and then we're going to pass it a key for enable we're going to set that I'm going to set it to false if you want formatting to be handled by the Lua language server then you can set that to True uh Diagnostics so I want to set a couple globals that it's going to be aware of so I want it to be aware of Vim so that I don't get weird errors there and I want it to be aware of spec right because I defined that Global function called spec earlier um so now if we go take a look at uh Diagnostics so if I go take a look at Diagnostics here we go you see the stuff over here click on this and we'll go back globals so there should be something called globals here it is so what does it do an array of variable names that will be declared AS Global so we want to have vim and we want to have spec okay if you're using my spec thing if you're using like the way I'm doing things and you'll see why I have that in a minute now we also have another one called runtime so we go take a look at runtime run time here we go where the hell is it there we go what is this like highlighting I guess these are the ones I can see this is like a nightmare I don't like this um I guess it makes sense but I don't know whatever so anyway we have runtime and so one cool thing I found out that I can do uh well one thing is that uh we always want to use l well you don't always want to use Lua jit but for the most part you're probably you're using Lua just because you're using it with your neovim config right so if you're using it with your neovim config uh neovim is using the the version for this is going to be Lua jit um just in time right um so if we go take a look at the version here so like version you can see what options are provided to you so hopefully this is big enough so one is L jit another one's like 5.4 5.3 5.2 5.1 um and the one that neovim uses is is jit as far as I know um so now we have another cool thing called special and so what special allows me to do which is kind of neat and I I really like this so there's there probably is at least going to be one person who is really going to enjoy the fact that we can do this so we can go to runtime special and then what we can do is we can Okay so let's read this special variables can be set to be treated as other variables for example specifying include require will result in include being treated like require so when I read that I was like oh neat cuz now I can create spec to work like require and you'll see why that'll be that'll be useful functionally later um okay now we have workspace so workspace check third party this is annoying as if you've ever dealt with this uh weird thing if you've ever just installed Lua LS and you've had it like pop up and like ask you like asking for like some third party thing blah blah blah um this is how you get rid of that these are some libraries that we're automatically going to include we're going to automatically include the Vim runtime Lua Library so like if I do something like a echo dollar sign Vim runtime there you go that's where that is um I'm using us the Bob neov version manager which is called Bob for whatever stupid reason but you know whatever and this is going to give us access to the library code that that is there built in the neovim um and then also it's going to add the stuff in my config Lua folder as well so this is all going to be stuff that's going to be available to me and available to the language server some other cool stuff that's built Neo him at this point is hints and um I'm going to actually have to go enable that in the capabilities but you can see that we got some cool stuff we can do with hints um I'm going to just I think right now I have them set to false but maybe I'll set them to true so that you can kind of see um how the hints are going to work also Telemetry I don't know if this is on by default but we don't like Telemetry we're not fans of telemetry tele oh Telemetry has been removed oh good it's gonna say look like all right man like I get like opt in Telemetry I'm not like I wouldn't um I don't really like hate the concept of opt-in telemetry but there's a slippery slope so you know we definitely don't want like opt out Telemetry where they and that's like using vs code right so V code is just going to like basically vs code is just one big key logger so you can just assume that it is uh and I mean like I guess you don't have to but like H whatever I assume it is you don't have to I assume it is you can call me a conspiracy theorist if you want but I assume it is um but it's it's nice to like when things don't include Telemetry but I understand why like a project might want Telemetry cuz then it's like you can see like when errors happen and you can create a better experience for users and stuff but but I feel like things like this need to come with like a lot of trust and like I don't trust Microsoft inherently and I certainly don't trust like just some some language server that's installed for the most part right so it's just nice that I guess they don't have that option anymore I'm just going to leave it uh as false anyway just in case I ever end up using an older version or if they ever bring it back um I do want Telemetry to I want to at least ask for it to be false um okay so yeah that that's the settings that I have there so now going to go back here oops it let's go here all right now uh we do have this set up I think so if I do like that there we go yeah okay and now you can see Lis syntax uh Miss symbol you know uh d double quote there right uh so if you if you leave the virtual text on then you'll see virtual text there I really don't like the virtual text I think it's very noisy I don't like it I'm not a fan I like I press uh GL so that's me pressing G and then L for the for the diagnostic now something that's really cool and something that I love doing whenever I see an error and I'm like what is that error I don't know how that works what's the problem I'll do GL and then I'll press GL again so if you remember that focusable thing from earlier when we were doing the LSP config that's what this is so now I can just press y y in here right okay and then I copied it to my clipboard pass it in look up the error there you go right so that's why I really like being able to do that um yeah so so there you go language server works now let's uh let's look at what we did uh so so one cool feature that we added so spec now gets treated like require so if I do uh go to definition on requir so if I do like GD right see how it jumps me in there I'll press contr o to go back back now if I do GD for spec it also supports that so now if I have this this init.lua file and I have all my specs set up and I want to go take a look at one I'm like kind of looking through all my plugins that I have here I can do a GD on top of one of them and I can jump to it and I can just jump to the lazy spec that it is representing so that's why I really really like this spec keyword so there's so many reasons I like it one reason is that I can easily I don't have the comment plugin set up I can easily comment things out and like start my config with one plugin completely commented out another reason that I like it is because I get to At a Glance when I'm looking at my init.lua I get to see what plugins are installed another reason I like it is that I can press GD on it with that runtime thing in the settings and now I can like go take a look at my config for every particular plugin that I have here so that's something that I like about it um now let's uh let's keep going because we got a lot to cover um let me see hopefully people are still watching uh I'm looking at some of the comments there's a ton of comments no way I'm going to be able to go over all these comments but yeah hopefully if you're getting value out of this though uh let me know make sure you like the video or something like that um or put a or say something in the chat all right let's keep going again you're you're gonna if you keep following along you're going to learn cool things now we get to go to the cool things section okay this was like the basics of like how do I you could probably a few people could stop here I think I would still add like telescope and stuff let me close some of these but a few people could basically stop here and you know you'd have your syntax highlighting and your language server stuff and um you'd be able to install other language servers and you know you'd have something decent but we're going to we're going to do weird stuff by the end of this I think we're already doing kind of weird stuff with the language server settings um I'm I'm going to actually add a couple other language server settings here that schema store thing uh we actually have to explicitly set that up uh with the Json LS uh language server with the Json language server so what we're going to do is we're going to pop that over there pop that over there going to user LSP settings and it's nice because now because I have that function set up um and that for Loop so now anytime I want to like provide some new settings for a language server I just name the language server here I say like Json ls. Lua right Json ls. Lua I just copy this here and I just pop in the settings here and then it just automa magically just set up um this formatting you completely ignore this nonsense it's I don't think it really does anything useful um but here's what we're doing is we're we're again you notice the same kind of thing you see this settings and then the name of the uh like the the file type kind of name right and then like the the settings so then we have schemas and then we're going to require that schema store plugin that we that we had so now what we're going to be able to do you remember that I said we would go and return to that package Json with new capabilities now whoops I made it smaller wanted to make it bigger so whatever we'll yeah we'll do it like this so I'm going to go to this web app I've been working on and we're going to do package. GAC on all right now watch this if I do a version well it should work one second I do version I know this oh all right one more plugin we got to install before that's going to work we got to install um CMP where's CMP how did I never install CMP throughout all this I never got around to installing CMP CMP is what's going to give us our cool Auto completion and stuff like that so let's let's do this because I feel like this is more important than a lot of other things what is this there we go all right so now we're going to do spec user CMP file doesn't exist yet so we're going to do e Lua user cm. Lua and what I'm going to add here is a lot of nonsense CMP is I think the hardest plugin to set up I think it's harder than the language server stuff to set up okay um I'm gonna get rid of these commits because I want to get the latest stuff we're going to just load this on insert enter that just means when you open up a buffer and you press I and you're in insert mode that's when all the stuff is going to load so that's why you keep seeing event insert enter I don't know if we have to pass it to all the dependencies but I'm doing that um so let's go down here let's let's Strip This of some of the extra nonsense that's only going to serve to confuse you so I'm going to get rid of that and we're going to we're going to go through this once I'm once I'm done getting rid of uh stuff that is again only going to confuse you yeah well we'll get rid of this for now tab n create this is me just setting up like icons and things um I actually am going to keep the Emoji one cuz I'm going to to show you how you can get like emojis and Ne of them um we'll keep this stuff this stuff is just sources and like how you want it to all like be set up I'll get rid of the co-pilot one for now just cuz well I'll leave the co-pilot one I think usually when you have co-pilots usually like the best suggestion it should be at the top followed by this um I turn off Snippets for Java but if you're program in Java just trust me you probably want to turn them off but we'll get rid of that for now um what is this we could probably get rid of this entry filter I don't think that this is this is not really something that is going to be this is something that I will notice that most other people will not care about so there we go okay so this is just going to be how we have our sources set up so like you know again some of these you can get rid of and ignore um it's not a big deal if you do have them set up here and you actually don't have them installed it's not the end of the world but like if you have co-pilot installed that'll be first first and if you have some language server stuff like you know like keywords and whatever your language server is providing that'll be kind of like second uh Snippets will be third uh tab n is like another kind of co-pilot thing envm Lua is like another thing stuff that's in your buffer path would be like sometimes you'll be like trying to like you know see something in your path so it' be like Chris and then blah blah blah you'll be able to get like auto complete there um calculator I don't know maybe that's useful for some people but you can get like autoc completion for like calculations and things like that and then like emojis so like when I do this we're going to we're going to get some emojis and you'll you'll see that'll be kind of cool tree sitter actually has completions crates is like just from a plugin and t-mo is from a plugin too this is you can ignore like the extra if you want to get rid of like this and this you know and like this and if you don't use co-pilot then you you can get rid of that stuff um we're using L snip for our snip uh confirm options I'm not going to go over all these options but for confirm options I have this here that's just the way that I like it uh ghost text I don't like that what does this do what does this do this sets up Auto pairs but it's in a p call so it's fine so it's not a big deal we don't have Auto pairs installed right now um but honestly I think that using CMP with auto pairs is a good idea anyway to be quite honest so I'm just going to get rid of that um all right now let's uh let's go over CMP so CMP again same kind of deal we're going to put an m at the top we're going to install this we're going to uh we're going to load it when you go into insert mode because you know we like to we like to be fancy and then we have a bunch of dependencies so one of them is going to be support for your language server uh so if you want language server completions that's that's how you're going to get it is like that if you want emojis that's how you you can do it like this if you want uh completions from your buffer like just random stuff from the buffer you can do that if you want path completions you can install that if you want to support things in the command line which I'm not really sure I really use this that often you can do that uh this is how you can integrate Lis snip with with CMP um and then we're also going to install Le snip as well and we're going to actually have a dependency on friendly Snippets friendly Snippets is like a big repository full of Snippets that exists so you know if you want to write your own Snippets or you're okay with like getting Snippets from uh from your language server and that's enough for you then then you can ignore this dependency but but if you want a bunch of extra cool Snippets you can you can use this and then we have MVM Lua which I think gives some like extra completions and stuff like that for L I'm not really sure that this is really super important but it's there I don't really know why I'm doing this uh okay so let's go through the config uh we're going to just require CMP require L nnip uh just as some variables so we can like use them to set stuff up and reference them in the future we're going to get the loaders from vs code uh again you can go to L snip and you can see all of these uh like if if we go to LS snip you you'll see I'm not like coming up with this stuff myself I don't know why I put that but that t there but see like VSS code see so like vs code like to use existing vs code style Snippets from a plugin like friendly Snippets simply install the plugin and then add this line so that's why I'm adding that line right this is a goofy function that I have that just trust me you want um I'm not going to explain this too much I don't feel like really explaining it but like just trust just it's hard to get completion to work um in a very like like where things aren't all goofy right uh trust me I've dealt with like goofy completion like mostly around like pressing the Tab Key but yeah uh just just trust me this is this is useful so and then we have icons we're going to grab those then we have Snippets here so we're uh we're going to pass the L snip thing here and again if you just go to the CMP Repository uh like I didn't come up with this this is this is directly in there so if we go to uh NE neovim CMP you see like how they're doing it see snippet expand and then they're using vs snip here but look see this is the this is the way you do it with Louis snip right and I like Louis snip the best um it's worked very consistently uh for a very long time for me so I I recommend low snip so again that's that's where I'm getting that from these are mappings so I like to be able to press contrl K and J to go up and down I also have up and down in here but I really never use them so you could get rid of them if you want to scroll through documentation when that's available you can do contrl B and contrl F to go backwards and forwards through the documentation that's the semantic kind of meaning for control B and F there uh control space sometimes you'll be like on a line and you're like you want completions but it's not going to complete unless you start typing so instead of that you do control space and then what that's going to do is it's going to pop open the completion menu this is rare but it happens that you do want to do that and sometimes you have the completion menu open but you want it closed and you can press contr e for that then we have um you know carriage return CR stands for carriage return what that really means is that I press the return key and when that happens I want to select whatever whatever's there now Tab Key I like to set up this concept called super tab right super tab means that the tab key is going to do a lot of do a lot of stuff it's going to tab through completions but it's also when I select um a snippet it's going to tab through the snippet as well and I'll give you an example of how that's going to work so if you want super tab to work and again you can just delete this stuff if you don't want it but if you want super tab to work and I'm going to even show you how to do a cooler thing too it hopefully I'll be I'll have enough time we'll see I do plan on this going for a while I plan to like get all of this in one Stream So then in the future I can make videos about cool plugins you know so I I just want to like if if you want to like know how to do all the basics and like get in the nitty-gritty about how to set like up your neovim config and like weird things like this this this is the stream to come to um you just reference this for the rest of the year um for how to do weird stuff like this but anyway so you want the Tab Key to like tab through suggestions you also want it to like move through your Snippets and do other things you got to do something like this so we're saying like if the CMP pop-up menu is visible then when I press tab I want to select the next item if Le snip is expandable then I want to expand the snippet if l snip is else if if the expand if I can expand it or it's jumpable then I want to expand or jump and I might be able to like get rid of this but it it works so well the way it is I don't want to play with it uh then we run this check back space and if that's the case then we just fall back and fall back what that does um it's just going to fall back to just be like the normal Tab Key so it's just it's just going to be the regular Tab Key so it's just going to like it's just going to t over right because you also you want it to behave like tab too you still want it to behave like a Tab Key sometimes um so yeah so this this is the way you got to do that and same with shift tab probably you're not going to use shift tab as much but the the most useful thing for shift tab in my mind because it's it's a very difficult thing to press when you want to press like shift tab like it's it's just like unintuitive kind of um at least it is for me I rarely like I don't know I rarely ever press like shift tab so it's just like a weird thing in my head to like ever like put my pinky on the shift key on the right and then put my other pinky on the tab key like I never really do that but like the time that it's useful is when you want to like move backwards through a snippet and that's that's basically what we're doing here we we select either the previous item which I don't know if anyone really moves up and down through their menu with uh shift tab but if if you want to then it's there but I like to use it just to move backwards and a snippet formatting I like the way that this looks it reminds me of kind of like the way that vs code kind of formats their their entries um a kind a kind is like an icon an abbreviation is like um I don't know like the the name of whatever you're going to do the completion for and then I don't really know know what menu is but it's there uh I think oh menu is like yeah like you'll have like some sort of like name so you know that it's like a snippet or something like that but I I typically derive that from the kind so I usually know what I'm looking at when I'm looking at the kind and so I like the menu to like be nothing but like if you want to know what source it's coming from then you could do something like you know you could do something like um uh whoops do something like uh buff here buff buffer maybe if you want to do that or you could put in live seeing people put in like parentheses like you could do something like that but I I don't really like to see that so I just get rid of that um we're also going to set up our own source name called emoji and we want it kind to be the smiley kind so you can see this see I got a little smiley face there so that's the kind I want to see when it's an emoji and then it has a it own highlight Group which I actually deleted earlier but whatever it's not a big deal and then we have our sources this is how they're all going to be ordered we went over that earlier confirm options you don't have to care that much about that just trust me that that's probably the one that you want and then we have the window um you can probably ignore this but this is how I get the uh so I make the window look how I want it to I don't like the scroll bar um and I like to have the padding like that um I like the border to be rounded and this is a way to like handle the wind highlight but I feel like that should not be necessary I feel like that should just be something we really shouldn't have to care about I do want to know what the basic settings are for the window though if I go to I don't even know I would assume that hopefully they're not too crazy with this hopefully this is all fine so let me let me simplify it like that so in the completion window we want rounded we want like a rounded box there and then we don't want a scroll bar and then the documentation should uh should be rounded as well and we're going to turn off the ghost text I don't like the ghost text all right so there we go it's going to install the stuff and that's it so now if I come down here I do spec there you go see how we got like a nice little completion window there now spec if I do require and now let's go take a look at a snippet so if I do like if all right and now if I press tab see how I like tab through like that like I press tab to go to go through from like here like if you press tab here you would expect that you would do something like that but when since it's in that snippet context I press tab there you know uh it works it works how you would expect I don't know why this if statements aren't like highlighted good none of this stuff is highlighted good oh I need to do like if true there we go I'm like why is this not highlighted correctly but yeah so so there you go right that's that's kind of how that'll work if I do like while do right press enter there you go so now also sometimes you're going to do like a snippet it's going to kind of look like you're in normal mode but you're not so right now I'm actually in insert mode so if I start typing false see and now if I press if I press contr e to get rid of that and then I press tab look at that see it it puts me to the next spot and the snippet that I want to go so something to something to know um and then again tab is just going to work like normal in most cases see it just it's still just tabs like normal but it also allows us to move through Snippets and it also allows us to if we want to use tab to like move through suggestions so this is the concept of like super Tab and we can actually even make tab do like more stuff in different contexts um but yeah so that's CMP so now let's go back again remember I added that uh thing for the schema store now if we go to package.json and now I get to show this off if we come in here and I also by the way probably want to do a TS quick TS install for Json yeah see you probably didn't notice but the uh the Double quotes were not the correct color but anyway so come in here now we do version Look at that see those little wrenches let me know that the schema is being invoked and that this is smart enough to know that version's a thing and it even tells me a documentation of what version is this is because I set up the schema store so we have version must be parsable by node sver which is bundled with mpm as a dependency so this gives me some context right if I go to name right see that now if I get rid of name uh I was wondering if like it would also like care about that but yeah anyway I guess it doesn't but anyway you see that come down here the name of the package there you go uh private what does Private do if set to true then mpm will refuse to publish it there you go that's what private does now if I put this you see that I have some options here for different things if I make this a little bit bigger probably get a bigger thing say this these are all the different things that you can add to a package.json with a list of uh descriptions or not list well yeah descriptions associated with the with the keys that you can pass to a package.json now this doesn't just work with package.json this will work with like any Json config file which you probably are dealing with some Json config files at some point um you can still you can set this up with yaml too think you would just have to do like a similar thing with yaml L but anyway this has got to be useful to someone I at least I hope it is so yeah so another thing like I think if we open up like um tsconfig Json all right see same thing now we get to know what all these things do for TS config all right and hopefully that's a good explanation about what that's doing um so now we have CMP installed that's cool I feel like we should have done that earlier but we got around to it let's go back to the in it um let me see are people still watching yeah we still have a good amount of people watching uh let's see okay I'm looking through some of the comments here I don't think I'm going to be able to answer them just cuz there are a good amount of comments and I'm glad that there's people asking questions and stuff like that um but we have so much to cover right so we're going to just we're going to keep we're going to press on and we're just going to get as much done as we possibly can just so I I just again I want to answer all of these questions in one stream stream and uh yeah so let's um I think we enabled hints earlier um oh someone's referencing the the new default theme yeah I went over that like way earlier in the Stream um let's uh let's do hints really quick inlay hints so maybe you have seen inlay hints so now we're going to just start doing fun stuff uh we're going to do I mean we definitely should add telescope but and maybe like a tree or something but we'll get around to that so let's do um let's do hints [Music] so uh this and we're looking for LSP config and we're looking for hint okay and then we're going to say okay if the client supports method text document inlay hint then I want to do vm. LSP inlay hint. enable for that buffer and so we're just going to put that in our onattach okay and we'll just do like that like this and I'm not opening anything there I'm used to like uh my dashboard thing opening now we should be getting hints maybe we have to wait till this loads uh we we actually are getting hints you just don't know it uh look really closely you can see that we have semicolons here so one of the cool things that Lu LS does is it actually provides semicolons as a hint see so it'll actually tell you that it's that it's there all right so if you get rid of it it let you know that that that that that's the end of a line right um so this is like a thing that it does now I think we can we can get a little more spicy with the hints that are that are provided so let's uh let's go do that let's do Lua we'll do a Neo let's do Lua Lua user LSP settings and then we're going to do Lu LS and what I'm looking for is particular hints so I've hint enabled true array of index param name let's do all and we have the semicolon on okay and then we have like that set type okay um so maybe that will set up params so hopefully that will work if I open up like this now there you go see these are hints now so you remember the spec function so if we go to reference on the spec function well not go to reference actually we want to go to Def but yeah there you go see it takes an item right and you can see that that that that's what this is and I think I might well I don't have the keys set up yet but I'll show you how to toggle these on and off because sometimes it can get a little bit noisy so you can see require takes mod name and we pass it the module name all right um one second so now let's do uh I'm just going to leave that one there there and I'm actually going to turn this off for now I'm going to disable those just cuz I think they're kind of annoying and I'll just I'll leave the semicolons on now a lot of people want to use Neo them is a python Jupiter notebook but I'm not really sure that that's I not really sure that that's like I don't really know how that would work to be honest I know there's like a plugin out there called Molton that does something like that um all right let's do in. Lua yeah I think the theme color looks pretty nice it looks better too when the uh highlighting is coming from the language server too so right now actually if we do inspect now that we have the language server set stuff set up um we actually aren't getting the highlighting from treesitter anymore we're actually getting the highlighting uh from the language server um so that's another thing to be aware of now let's do maybe let's clean up some of the formatting here so we're going to do NLS so NLS is going to allow us to set up things like formatters and linters and other weird goofy stuff but you can mostly think about it like formatters and lters also let me um show you this too I said that we'd have emojis and here are the Emojis so you go like a rocket emoji there you go right do any emoji that you want and remember that we created our own little smiley face kind for it too so you can see that we got a little smiley face in front of it so yeah what means spec uh I went over that in the beginning of the stream um it's basically just a really simple function that we wrote here all it does is it just adds uh it adds the item it adds the spec to a list of like it like it adds a lazy spec to a big list and then at the end we we just we pass that big list to lazy so yeah I went over some of the benefits um I I think there are enough to justify it will this be in a GitHub repo yes all this will be in the launch uhmm repo when I'm done I already have like something there but I'm going to update it with what's here uh once I'm done uh by the way this uh will all be for neovim 0.10 as well not for neovim 0 um 9 okay so now we have LSP config we have all this kind of stuff I think I was going to do none LS so let's go take a look at that Lua user I think it's still called null LS in here we're going to we're going to change that so let's grab this and we're going to do spec and we're going to do user Dot and we're going to call it none um LS like that I guess and now we're going do e Lua user uh n- ls. Lua and I don't know what this is complaining about I think it's yeah it looks like the hints are just a little messed up that's something interesting um not a big problem though so now we have this um feel like I should do the same thing with Diagnostics so like if I do like local Diagnostics it's equal to null ls. builtins dot don't they have Diagnostics Diagnostics I think that's what it should be and I'm probably not going to use any D well maybe we'll do flake eight just to prove that it works but okay so again same thing uh none LS is the spiritual successor to null LS I think you still require it as null LS but you you know install it via null um non LS now what we're going to do is we're just going to grab a couple things just so we don't have to keep repeating ourselves so much when we uh set stuff up in the sources so I think I want to actually turn debugging off here um just I guess for maybe performance reasons but so we have formatting here and then we have Diagnostics these are the big ones um Diagnostics you can also you can also think of that as like linting um and you might be tempted to set up es lint this way but we actually set up eslin as a language server and I I really recommend doing it that way and not doing it this way um so let's take a look at something like prettier we have set up here something like like Style We have set up here let's do um let's do diagnostics do uh I think it would be flake8 and then we'll put a comma okay so now we have you know it it should be like pretty simple to understand at this point we have the name of the plugin again we have a config function and then we return it and this is a lazy spec um now this is again just from the documentation so you just require it we're going to grab formatting we're going to grab Diagnostics and we're going to just put them in the sources so we're going to set up style Lua we're going to set up prettier we're set up flake eight and then we're going to set up a this completions for spelling or something um now I should say that this also works with Mason so Mason installs these so when we go to Mason like this and then we would go take a look at a formatter and we don't have style Lua installed so let's go find style Lua and install that and there you go so now we'll be able to use it um if we go look at like the linters we do have flake eight installed so we should be good to go there so now let's save this can install none LS um and now I kind of need a key binding for this and this is where uh witch key is kind of useful so I'm G to actually just set up which key now what was that what are we complaining about we need plener so we finally do need plener for something um so let's go let's go actually install plenary it looks like none less depends on plener so if we go take a look uh we're going to do it looks like this is not going to be friends with us while we tried and solve this problem here so here's what we're going to do we're going to we're going to use the way we already set up our config so we're just going to go in here we're gonna it's going to be painful but we're going to do that we're going to comment it out and now we're not going to have that error anymore this is why we set up our config like this so now what we're going to do is is we're going to go to non LS neovim blah blah blah blah blah pler plugin depends on pl. envm so we're going to make sure that we pass that in for it oops so we're going to do this I don't know why that didn't copy all right we're gonna do [Music] dependes I think that's how you spell that I'm terrible at spelling and then we're going to pass this uh we're going to have to put some see I'm again I'm used to using surround here and we're going to go like that and we're going have to format it ourselves and there we go so now when we restart this it's going to install plenary as a dependency for that and now we're not going to get errors um now if we actually want to run it like run like a um like a formatting oh yeah it wouldn't really be here actually it would be uh it it's the the the really useful thing like the reason we use something like NS or nons is it actually plugs into like the language server capabilities inside of neovim so I don't need some special format command I can just use the formatting that's built into um uh neovim itself and the Vim API so if we go to um I'm just going to quickly set up which key so we're going to do spec uh user dowi which key because this is just how I and the reason I'm setting this up is just because this is how I usually set up like all of my leader key bindings and I have like a bunch of different leader key Bindings that I use for different stuff so we're going to do that and then we're going to do uh e Lua user and then we're going to do which key. Lua like that and this is just that stupid hint thing um I guess if you have an empty file this is something maybe the neovim core team has to actually handle so now um I'm just going to go copy my config for which key it's actually not super complicated wi key it's going to come down here and I'll explain what this does same deal we just you know put the name of our plugin here some event not that I think this event is really actually important for this because I call it all over my config so like we're we're really not going to get the usefulness of that event there um now what this is going to do is it's going to give me some mappings see my leader key is my space key so if I press space Q it's going to like quit if I press space H it's going to turn off the highlighting from search if I press this it's going if I press space semicolon it open up a terminal if I press space V it'll do a vertical split and then these are just like names of groups and then I actually set up the uh witch key stuff in in the particular plugin spec files the reason I do that and the reason I register the stuff in those files is so that if I comment that plugin out it gets rid of all of those it gets rid of all of like the little witch key Bindings that go with it so that's why I do it that way have some here for tabs if I want to create a new tab that for Tetter and so on so forth uh these are just some settings for wit key you can go through the wit key repository and you can see like the different settings that it has uh it's really not it's it's it's really not interesting like you can you can go read through the docs and you'll see that uh here's where I pass the options where prefix is leader and remember that in our key maps earlier we set space to be our leader key and then we just register our mappings now we're just going to run this witch key register like all over the place like in all of our different plug-in files or all of our different spec files and we're just going to like build up our leader mappings that way that way whenever we press space and we wait long enough we'll see like if we forgot what a mapping was it'll be there like waiting for us so I'll do this we'll install it let's do um I'll press space wait a second and there you go so now we have witch key so for instance if I want to press Q now it quits all right so what I'm going to do is I'm going to and the next thing I'll probably install is telescope because I'm tired of like not being able to search for files and stuff but um the next thing I'm going to do now is I'm going to go to to LSP config and I'm going to add some bindings for that so let's add some special bindings for the language server uh let's do like this and like that so we kind of see all right and here's where I set that up so we're going to do which key and we're just going to register a bunch of key binding that I think are useful for the language server uh stuff again this is all going to be in the repo so you can go take a look at this the one that we're going to be interested in mostly right now is going to be for formatting and uh so really it's just vm. lp. buff. format um I do have to filter out one particular client which is the typescript tools client but I'll get into that later uh this won't you can still use this command like even if you don't use typ script tools it's not going to it's not going to do anything um another useful one is going to be toggling hints on and off uh we're also going to need the toggling hints function that I have here as well for that so let's uh go and grab all of these okay and we'll just come down here to our config and I'm just going to pass that at the top like this and we're going to save open up this now when I press space l and then F see we get formatting now everything becomes uniform now that's not the formatting I necessarily like for my for for my Lua stuff so I'm going to create a Lu RC file or actually I'm just going to copy the Lu RC file so I'm going to do dot dot and I do mm. old. Lua RC into here and if we open that up oh we have that oh must be a Tomo file actually one second let me do a move env. old or no we probably want to copy it copy mm. old what do we got in here yeah style. that's what it is now if we open up style L.L uh we have a column with we have this other stuff the most important thing is that we have no call parentheses I just think that that looks cleaner so that's the way that I'm going to be doing it so now I'm going to format there you go now we can get all that nice formatting see if we turn it on Space LF um and if we forget how to format we do space we can wait for a second press L and we see that F does formatting okay so we'll do F and there you go now um I'm also going to add a function to go along for the uh inlay hint so we're going to go to LSP config again and right now one of these is looking for uh require user LSP config toggle inlay hints uh so we got to provide that function for that so we're going to go here there it is we're going to grab this and and I don't know where to put this uh I'll put it under the capabilities we'll just put it there okay I could just format yeah there we go so now we can toggle the uh inlay hint stuff on and off so you can see these these uh parentheses are actually hints they're actually inlay hints so if I want to turn them off space LH and I can turn them back on right so it's kind of cool it's cooler when you're doing things like typescript and you're actually using like serious inlay hints but you know that's how we can do that all right so that's witch key that's that that's formatting and all that stuff let's open up a quick python file we'll do like a test. pie really quick here I don't know what that stuff was it index was out of range for some reason and some kind of problem now I know that that was to do with flake eight um so let's uh let's maybe find out what happened there uh what do we have we have uh none LS it should be called flake8 so that like should work we have flake8 installed so I'm not really sure like what would have went wrong there so let's uh let's comment that out then let's uh change this to flake eight like that it doesn't like that for some reason let's go take a look at the code sometimes we have to we have to do a little bit of a deeper dive um into things so where is this stupid thing let Louis didn't I open this up somewhere um let's do none LS yeah like see that's how you would do it we have flake eight installed so that should work if we go to um this go to built-ins go to Diagnostics should see something like flake eight here I think maybe there isn't a flake G oh there is there it is could be yeah the name is flake8 I don't know um let's do a quick like thing we're gonna do like a DOT get here sometimes you have to do stuff like that def test uh print I haven't written python in a minute test if I already have some code in there now what if I do something like this and test two okay I guess you just need code in there to start with for some stupid reason but there you go so flake eight is there expected two blank lines found one so now it's like okay format request failed because there's no matching language servers so now what if we go and we set up black for for that maybe it'll fix it right so if we go to NLS and we're going to want a formatter here do formatting do black and we installed black earlier with Mason so if we do Mason and we go to the formatters see we got black so now I'll do that I'll reopen this test. P I'll format it doesn't seem to care oh actually it does Okay cool so it run and there you go so get rid of that flake8 shows up format there you go um looks like for some reason Sometimes some stuff is out of range or something for flake a looks like flake eight likes to complain but you can see that it works so yeah we're just going to remove that file now I just wanted to show that you know that's a that's a thing now let's do hopefully let's also do a check to see if people are still watching yeah it looks like we still have an audience here um let's see okay so yeah now let's move on to let's have a telescope be installed because telescope that's something I'm not enjoying not having so let's do I'm going to keep this here and we're just going to do like this I'm going to put that there and we're going to do e Lua user telescope. Lua that hint thing is gonna bother me every single time so I guess it just is what it is I don't know why it's complaining every single time that uh I don't I don't know whatever it is what it is so now okay we have telescope I'm going to grab the not the telescope file from there I'm going to grab the telescope file from my other config here uh telescope okay because it has all of the witch key Bindings that I told you about and also it has another cool function that I'm also going to talk about as well so let's install telescope and I guess we're using FCF native too for that I don't know I guess it makes it faster so someone once told me it made it faster well why is that not working yeah fine should be there the witch key stuff should be running maybe because telescope's not and then I bet now yeah okay let's not do this see this is one of them foot guns that we want to not deal with yeah see so it's not it's not loading because of the because of the stuff we have there there we go all right so let's uh let's talk about telescope really fast so telescope allows us to kind of like fuzzy search through things so um this is fuzzy searching through files you'll notice that I have this really cool way of uh doing this and I actually just found this today in like a thread um I can't remember the thread but there are some thread in the neovim uh or in the telescope issues that shows you how to do like you know set things up with like the icon the name of the file and then the path like afterwards and like kind of like muted and so I really like that so like now if we want to search for like you know the telescope file we just do that and you go back to in it and then you know it's really fast and when you pair this with something like Harpoon it's just it's really nice so let's again all right we got this then we have some dependencies we're going to use the FCF native um it has a build step and lazy true so yeah so that's just something that uh we can use along with telescope I guess it just makes things faster I don't know you probably don't really need this it's you know uh then we just have a bunch of witch key stuff so you can see all this uh so if I press space and then I press F you can see that we got all this stuff here right you can press like um let's see we got f for find files and we can do some something like space ft and now we can search through text within our files so if we're looking for something like leader right you can see everywhere the leader here is defined see something like them you see something like require right and so that's a great way to kind of navigate around um being able to see like going and finding like fine grain text throughout your projects another great way is just you know know the names of your files that you want to go to um a lot of these other ones are just goofy nonsense things that you can do but you know it's up to you if you care about them but they're they're useful for me um now we go through here this is the auto command that made that cool looking thing so this is in that issue somewhere you go find it and you can find like the original author whoever created this little Auto command but yeah this allows you to like make that look nice I have that in there it's not super important I may get rid of it um in this in in here just because like I want this to be a little simpler so maybe we'll get rid of some of these as well um let's get rid of um um we can still leave these up I guess I don't I don't know I feel like it's it might be a little too much I just want it to be simple when people like show up to it like I don't want I don't want this to be like confusing so key maps and registers old files feels like it's useful you don't really need Man pages the last search thing is kind of cool media files you don't really need highlights you don't really need uh help tags that's kind of useful I guess um grip strings and live grip I don't really know what the hell the difference is between this what is the difference guess it just looks within within this file it's not really that useful projects is kind of cool I'll probably leave that in um and I'll probably install the projects thing get branches find files yeah I probably leave those and buffers buff buffers is really nice because now we can search through our buffers like this so if we want to go there that's an open buffer space BB jump over to this one um these are all like the different things some of these are probably not important like if I I probably get rid of like that stuff probably don't need that uh you do need to have rip GP installed so keep that in mind it's called Rip grip the command is RG though uh yeah these are just some mappings we're going to get rid of this the file name first thing all right and yeah then we have that fzf extension that was that's the dependency I guess it just makes things faster it's something I guess that you can use you don't have to use it though all right so now we have that that's about the s that about as simple as I really feel like we can make it and there you go so I do like Mason we go there and go back to in it you know search very nice there you go um now let's do I guess we can add a tree we add mm tree I know this is contentious some people don't think you should use a tree I think having a tree can be nice sometimes so we're going to do e Lua it's nice to just kind of see how your project is laid out sometimes that's my personal opinion MVM tree. Lua I use MVM tree I know some people every single time we open a fly with these stupid hints I got to turn off these Lu hints um so yeah let's go I'm going to use my other configs tree or my yeah let's uh let's close this because now we now we can search what's the problem here ah it doesn't have that yeah that's fine so let's do MVM tree I'm going to grab this paste this can I get rid of there we go all right same deal we have our M um this time we're saying we want to install envm tree we have this very lazy event I went over that earlier so you know if you're new to that you can just go back and rewatch some of that stuff uh from earlier in the Stream uh we have our config function and you know this is this is where we're going to set up witch key again and we're going to have leader e be envm tree toggle it's going to open up our Explorer uh this is some special stuff I have on attach why am I doing this I don't really oh this is how you have to set up key mappings so I like to press like V and like open things but again is this really super useful for new people not really really need that so we're going to we're going to toss that um these are all things that like a lot of these um settings are probably already set but sometimes I just put them there anyway just in case I want to go back and change them so yeah a lot of these though like the glyphs thing are just icons and again if you remember from earlier I created an icons file so that we can like easily just keep all of our icons in one place so if I go over there you know you can see they're all here um so yeah these are just basically icons and a bunch of settings that are already settings um for for MVM tree like a lot of this is probably not anything that just isn't already in their config so yeah I that's it's not really complicated this is really just kind of like setting up MVM tree and then just like with all the default settings for the most part but just I'm doing it explicitly um you know maybe in the future we won't do it explicitly maybe I'll make this config look a little bit simpler but it's not even it's literally just like passing like Boolean options and strings and things like you you probably could get away with like even deleting everything in inside of here and and like setting it up you probably would be fine so yeah anyway we're going to do that g to have it install it for us all right and now we got a little tree here kind of go through our different files we can see how our project is structured now a little bit better and we can close it when we're not using it there you go um I used to be a longtime monthly GitHub sponsor when I discovered Elvin but it ended because GitHub changed some stuff do you have any preference or is GitHub supporter good enough um yeah if you want to continue to support me on GitHub I would definitely appreciate that um you can support me on YouTube too if you want to get a YouTube membership that's also good um but yeah I mean any of that support it all helps and goes a long way so if anyone is finding this long painful stream helpful you know you can send super chats and things um I don't even know how many people are watching I would assume there's probably at least like 20 people watching do a Chris at machine yeah yeah we got a good amount of people watching good but yeah so all right let's keep going uh now we have MVM tree installed Let's do let's do another one and and no okay another thing is too by the way when I keep like copy and pasting these things that's like the best part about how I have this config set up you can use any of the specs that you find in my personal Neo them config and you can just drop them in right and if you don't like one of them you just comment it out right you just uh that's it I I wish I had the comment plugin but yeah so you just comment it out and get rid of it or you can just delete it and get rid of it it's not like super tied in it's not like a neovim distribution it's not like someone's super complicated neovim config like each one of these files is just a spec if you don't want it anymore just delete it it's gone it won't get loaded and if you do want some other spec that's cool you know you can probably go anyone who's using lazy Vim correctly or using lazy. envm you can go see how they're defining their specs just pull it in you know and then you can just you can go and grab config from other people's uh new of them configs and do other kind of cool stuff so that's why I like doing it like this uh maybe we should get our comment plugin there are a couple like boring things that you know you just kind of have to do so let's go see uh we'll do uh let's do spec uh we'll do uh user. comment and then we're gonna now we can use our tree if we want to something like comment Lua boom like this I'm I'm going to turn off the uh the hints for Lua because it looks like it just it likes to complain I don't know why expected a table of specs but a Boolean was returned instead yeah so that's because um we have to actually add something to this so that it's a valid lazyy spec so now let's do uh comment like this and I'm going to simplify this too so we have a dependency for TS context commment string um that's really useful if you use react so if you're a react developer you kind of you probably want to pay attention to this part because this is going to make your life a lot easier um so now let's do couple things again we're going to do which key here so you can just see how I have two mappings uh for leader and forward slash so when you do leader forward slash uh you're going to comment something out and if you highlight multiple lines in visual mode and then you do leader forward slash you're going to comment multiple lines out um we're also going to add um uh context commment string and if you go to the config for and we can probably just toss all this junk in here this is stuff that I don't even know why I'm like the only thing that's important is the pre for context cont string so what we're going to do is we're just going to require context commment string we're going to set the enable auto command to false and then we're going to set up this pre hook with comment okay and then we have just some witkey bindings for you know forward uh or we're going to press space forward slash and that's going to allow us to comment stuff out now the context comment string is important if you're a react developer if you're not a react developer it probably doesn't matter like as much but might still kind of matter so now let's do this all right we just installed comment. envm and envm TS context comment string so now if we do this see that we can do this right now if we go and open up like a uh let's do something how do I make this like I want to just yeah so so now let's make this a little bit bigger repos resolver it's like a project I'm working on I think this has like the old code though yeah all right so we have oh all right so here's another thing tree sitter is not installed you can tell um but also the language server is not running because the language server would probably also handle this so we're going to do TS install uh typescript and we're going to do TS install JavaScript all right we're g do TS I don't know if they have one for typescript react it doesn't look like they do so um the next thing we're going to do too really quick is we're just gonna uh let's go move between this one we're g to turn on TS server really fast just so we can get that highlighting and all so let's do LSP config we just want to set it up because I don't I don't have typescript tools set up yet um and maybe I'll set that up later so yeah let's do what the the hell happened there uh TS server there we go and now we'll move back to this one open up the layout again why is it not turning on why am I not getting syntax highlighting I should definitely be getting much better syntax highlighting this this is not what I would expect um yeah I'm a little confused by that yeah like why is it not let's go take a look at our other config maybe there'll be a clue uh treesitter we have highlighting enabled not really sure what the problem is how come all right like if I do like TS enable highlight really is there really not like a typescript react no it's not is there like a jsx one maybe like a TSX there it is okay now still though I feel like the um the language server should also be handling some of this but anyway look at that see now we have a context comment string like kind of working like kind of how you would expect so I can comment out that piece of jsx there and then if I have something like conest is equal to I don't know nine I can comment that up there and we have that comment string and then we can comment down here we have this comment string so there you go oh yeah someone's saying TS TS install TSX yeah but even still I feel like the language server should have provided some highlights as well would have thought that it would have at least so like if I do like inspect here yeah like it's only treesitter but for some reason this one actually is being picked up with the semantic tokens correctly so yeah I don't know it's just confusing but it is what it is so just I guess remember in the future if you're using typescript react stuff then uh like TSX files then you got to install TSX it's not typescript react all right um so now let's uh we installed the comment plugin um we'll do maybe breadcrumbs later Lu line is low hanging fruit let's do Lua line you want a cool looking line right this is important it's important it's very important uh so now let's do uh spec for Lu line and we can just come over here and we'll do Lua line. Lua and we'll come over here and we'll look for my config that I have for Lu line and I'm going to make this very simple as well so we're going to get rid of this diff thing there r that um don't really again I I feel like this should be should be simple I don't want to like spend too much time I don't want people to get too confused with this kind of stuff ignore Focus inventry oh yeah so I don't want to like yeah we'll get rid of all this the Diagnostics we're going to just do like that and then we have this and that this and [Music] that um so if you want to use co-pilot um and you are using co-pilot then this is very useful to have if you're not using co-pilot then you can remove all the stuff uh related to co-pilot and we can probably get rid of the file type thing there as well and make it simpler so I would do uh so do this like that what the hell and yeah so same thing as usual we got the M we got the name of our plugin we have some dependencies again if you're not using co-pilot you can get rid of that um and then we have some options here uh so like component separators section separators and then if you want to ignore certain buffer types um then you can ignore focusing them there uh then you just have different sections a B and C are on the left x y and z are on the right and you can look up and see what options are available to you if you look up the repo for Lu line and then there are some extensions too if you're interested things like uh quick fix or man or fugitive and that kind of thing all right so now we'll do this okay and then we have our little line here now if I if this was a real GitHub repository like this one over here you see now that I have like a little little Branch situation there we got like where we are in the file and then that that thing right there lets us know that co-pilot is not working right now but I will set up co-pilot um and we could do that so let's uh I don't know let we could do co-pilot um co-pilot's easy so let's go take a look for co-pilot really fast so I have co-pilot for free so that's kind of like why I use it I probably would use maybe a less expensive one that doesn't cost money if I didn't get it for free um um but since I do have that so it's just kind of nice to be able to use it um so if we look for co-pilot all right and this is my config for co-pilot so we're going to do that and now this is one where it's like ah this is where I create like an extras drawer right so if you're not using it you don't want to use it then it's fine it's whatever so we're going to actually put this in extras right and then we're going to do uh co-pilot and so now that'll be there and so again same deal um just going to set it up with co-pilot there event insert enter dependencies we're also going to install co-pilot CMP I don't actually have co-pilot CMP set up um but you can do that if you do this so if you want to require that line there then it'll work inside of CMP if not then it won't um these are just some things you can jump to the next solution you can accept it with contr L refresh it with r um open it with uh with um I guess that would be Alt Enter you know that's for the panel though um for just a regular suggestion you have like acceptance next pre dismiss and these for file types that you might not want it in so maybe you don't want it in yaml um You probably would though maybe you don't want it in help or get commit or something like this um and if you do want to use it in CMP then you can set it up there I actually don't find any use for it in CMP personally but yeah so let's uh okay now we're going to add that spec so we're going to do spec user. extras. copilot Copilot all right now it's going to install both of those and now if you give it some time to like start up see you got a suggestion there if I press contrl L it's going to accept it for me so if I say um right uh write a binary binary search wow co-pilot has gotten like shittier uh maybe we start with like a function there you go there you go now it writes binary search for you right and like you can just probably it's probably right you know um but yeah so there you go that's a co-pilot set up and working is there a command like tab move plus one to buffers uh I'm going to talk about buffers windows and tabs in a little bit guys use codium yeah maybe one day I'll I'll use codium uh people are asking like how to reorder buffers you should not have buffers let me just say this really quick while I have people here stop putting buffers up here stop doing that it's bad it's not good just like sucks gives me anxiety when I see this tab concept of like all these buffers like 50 buffers at the top it's just it's it's not I don't recommend you do it that way let me actually uh what is VTS LS I don't know what vtls LS LS is I don't know what that is what does it do I keep seeing that mentioned in the chat here uh oh it's a language server oh is it good why is it good it's better TS server right now I'm using typescript tools but all right maybe I'll try this out in the future I'll definitely take a look at this let me uh let me go to the neovim one well whatever I'll uh bookmark it for later but right now I'm using typescript tools I might set that up later what was I saying though I was going to set something up and now I totally forget what I was going to set up oh well there's a ton of stuff to do oh yeah I was going to talk about tabs and let's do that this is this is this just trust me just do it this way it's going to be better all right you're you might think it'll be a little scary at first but trust me when you when you're doing something like this it's just better so I'm going to use a plugin I wrote that sits on top of navic um but you don't have to use this there's there's another one called like Drop menu or something like that that you can use as well which has a little bit more features but I like this this is what I'm going to do okay so I like to use the I think it's called windar right so we're going to do navic Lua and so this is like instead of using this buffer buffer list thing at the top like let's let's let's uh let's stop doing that so let's I'm going to install navic all right and then I'm going to install uh breadcrumbs okay and so it's really simple breadcrumbs it's in the lunar Vim org you just install it like this you acquire it there's nothing more to it just got to make sure that it's you have navic installed so we could put like a dependencies for uh dependencies for navic but whatever I don't care uh we know it's going to be installed because we're installing it here now navic again you know we just do the same thing we set up the module uh we set up a config this runs every single time I'm going to just set it up with the kind icons that I set up we want it to highlight we're going to automatically attach it to the language server um I guess it's clickable I don't know whatever and then we have um a separator yeah it's it's really not a complicated setup you can look up MIM navic it's really super simple and we're going to set it up with breadcrumbs too so now we have that so now if we go to in.a we're going to do navic and we're do spec and then we're going to do breadcrumbs like that okay we're going to install both of those and now you can see that I have the name of the file right here so that's what we got we got the name of the file right so then you might be thinking yeah but that doesn't show me like all my buffers that I have open um but that's that's fine because again you're probably only cramming like maybe like five or maybe like seven up there anyway so you're not even seeing all of them up there anyway so this is just a different strategy that I have instead of doing that um it begins with telescope so moving between files okay great we can move between files with telescope great now we can also open up buffers with telescope so now we don't really need that up there right because we have this so at any moment if I want to see what buffers are open I can do space BB I can see the buffers that I have open right I do space BB and I can see what buffers I have available right there's no way that you really I mean you're probably sitting up here and like trying to click through them and moving them around like and you're not seeing all of your buffers anyway you're going to get a bigger chunk of buffers faster like this and you're going to see like more of them and you can search through them which is better and you can move through them like and read the entire path for them and everything so it's just better to use telescope but we can we can do even better than that um especially with breadcrumbs and navic too when I'm in like a particular file so if I'm in like the witch key file you can see like oh look at that if I'm in some really deep nested object or something like you can imagine this is not that deeply nested but you can imagine some nightmares you might have seen it work where you're in some function context within some class within some other potentially some other class you know what I mean and then you know you're in some nightmare context and you have no clue what you're in right this is where something like this is super useful you know what file name you're in you know what context you're in you know maybe what function you're in within that context you can kind of see so this is what I like to put up here in the windar then if I have to switch to a different buffer I just open this up and I switch to a different buffer um now even better than that what we can do is we can add something like um Harpoon so if you've never used that before Let's uh let's set that up so let's go over here because I have it set up over here so we do harpoon okay oh yeah and I have a cool little notify thing too that goes with Harpoon so if we do Harpoon we don't have it over here so we're gonna do a do Harpoon do Lua like this and this is made by I'm sure we all know who the primagen is um and he's kind of a big name in the the neovim space you'd probably have to be pretty new to not know like this this plugin right here right I guess this does depend on plener um but I don't I'm not 100% sure but I'm not going to take that out of here so uh same thing as usual we just put it here we got a little event there we pull it in as a plugin I have some key maps uh one of them is shift M that's how I Mark a file and then I actually press tab to see the open files that I marked um and then I have this little Auto command that's kind of cool um what it'll do well actually this just sets uh the borders actually this is this is not this is not important we can get rid of that but I do have this uh file here called um like or I do have this function here called Mark file and what it does is it just it just marks the file but also it notifies you with like a little it gives you a little bit of feedback you got spear there and it says that it marked the file so we're going to go back over here we're going to do spec we're going to do user. Harpoon we're going to go like that and now you got really fine grained abilities to move between files so now if we do like tree sitter and then I want to Mark the what happened here oh extras okay that's it's looking for that one second let me uh Swap this out right now it's looking in extras because that's where I used to have this but right now we just have it in user so let's save this reopen it um so now we have we have in it. L marked so now if we go to uh tree sitter right and we'll mark tree sitter you can see I marked it down there I pressed uh shift M so now we can move between these two files like this and so very rarely are you actually going to mentally be using the context of like 30 tabs open at the top of your editor like honestly I'm telling you that just gives me anxiety thinking about that you can't keep 30 tabs in your mental context at one time now if you do want to see all of your buffers that are open like for instance let's let's let's open a bunch of uh buffers let's go to options let's go to keymaps let's go to no way you're keeping all this context in your head Harpoon let's go to uh schema store let's go to all the stuff that we've been kind of working on right right so now we have all these tabs open and maybe you might have them at the top of your editor like this but that is a a nightmare right now here at least we can kind of search through them and kind of see them in like a drop down and and like that's better right but it'd be even better if I'm working with contexts so right now Harpoon completely empty and imagine that I just want to work between enm tree and my init do right and so now I don't have this whole nightmare context of like all these buffers that are open I don't have to think about managing them and closing them and all this kind of I just think like okay what are the files that I'm going to be working on right now you know um like what what am I going to be doing what uh what files what contexts am I going to be working in and so like that's where Harpoon is really useful so if I'm just going to be working on these two files I I just move in between them and then I like to reserve this space like I said up here um just for the wind bar so I can see what context I'm working in so like again if I'm in some big ass nightmare file I can just be like all right this is the name of the file this is the context that I'm working in right I'm in the I'm in the setup function I know I'm in the setup function inside of a config object there you go inside of the MVM tree. L file and I'm never I'm almost never going to look at all my buffers I'm almost never going to do this I don't give a I just want to mark the files that I'm interested in so I'm probably just going to be searching through files and then it's like okay now I want to work on co-pilot and in it. L at the same time so I'm going to remove the envm tree one and now I'm just going to move between these files with Harpoon this is better but sometimes you also might want to also do like tabs right so what I recommend you actually use the tab bar for is actual tabs so let's let's take a look at how we might do actual tabs in the tab bar let's never put buffers in the tab bar again let's let's uh let's never do that again let's leave that out of our workflow from now on trust me once you you don't need them um so now we're going to look for something called Tabby which I think is a really cool uh plugin so this is a really complicated config here this is this is time where I just recommend you just copy and paste it and just trust me um again you don't have to use this if you don't want to use it I'm going to include it as an extra here um you don't need to use it if you don't want to but I think it looks nice the way that I have it set up and I think it works nice the way that I have it set up and the way that this config works because it's so modular because it's so easy to just pull things in test them out and get rid of them if you don't want them um you know we have we have that ability to do that with this so now if we open up our in. Lua we do spec user. extras Tabby all right and now what we're going to do is we're actually going to have tabs so I'm going to uh how do I have this set up oh I think I have it set up like a n yeah so now we have real tab and like what are real tabs tabs are collections of Windows um so now you can see that we have two tabs open now tabs you should have less tabs open because they're just kind of viewports into things that you're working in working on and the way that you really should be thinking about it is like oh okay well imagine that I'm working on the in it. Lua um imagine I'm working on in it. Lua and co-pilot like these two files so maybe I want to move between those contexts right but sometimes maybe I want like a split view of those context just to see them side by side so I'll do something like VSS here and then I'll do copil it open it up here and then I'll do in it. Lua open it up here and now I have a tab where they're both next to each other and then I can switch back over here and then I can like you know be doing other things and blah blah blah you know and then I can go back and see these two files like next to each other right um this is also useful sometimes I'll use this it with like a read me so like if we at the I don't have a read me here so we do readme.md like this uh we'll do like that right and we'll close this and sometimes I'll just be like writing docs you know I'll be like writing some code I'm like oh yeah okay let me write let me add this to the docs you know and then I'll just pop it over in the read me but I don't ever have like a million of these things open like I never have like all of my every buffer that I have open I I now if when I'm using tabs I have this ability to control how many Tabs are actually up here and it never really ends up getting out of hand so this is something that I use uh pretty often um it's just another way I do things so let's close that um I'm looking through some of the uh comments here happy New Year Chris back to filling with NE ofm uh only once we're not doing this again for a while would now have their duck humping open yeah uh there's not much of a difference Downes copy [Music] past okay recently migrated from Packer to Lazy loving it so far yeah I definitely recommend using lazy overpacker can I explain the spec function the spec function is super simple it is literally just inserting uh specs into a list and or a table all right and then we take that table and we give it to lazy that's it that's like the long and short of it that's really all we're doing what it allows us to do is have one file where we can see each of our plugins laid out for us like this and then if we Leverage The runtime stuff with the Lua language server a little bit then we can do stuff like this where we can GD and go to definition for each one of our specs so I like that and then if we did this and if I had a big stupid buffer line thing at the top here with all my buffers I would have a million buffers opened up for me right now you can see that they're open in telescope look at them they're terrible it's messy and noisy and it's trash you don't want it so what's better is har and the occasional actual real tabs that's my opinion um all right so let's keep going another thing I like to do is uh smooth scrolling so let's uh let's add smooth scrolling so I have neoc scroll that I use and we're probably going to start moving a little bit faster through some of these plugins just so I can kind of show off different things uh but for this one we're also going to keep this in extras so we're going to do extras and we're going to do neoc scroll okay like that and then I'm going to go and just add this here extras we're g to do neoc scroll all right and what are we doing we're just adding the plugin we have a config I am remapping key you know I found that if I use like the Vim doet key map it had like some bugs so I actually like pass like literal Vim commands uh like you know the no recursive map here and the V visual no recursive map here so I just found that I had to do it that way um and now I like to do contrl J and K to go up and down um I just feel like it's more ergonomic for me to press contrl J and control K to move up and down and scroll through a file so now I can kind of scroll like this and it just makes my life so much easier I don't ever really find myself wanting to press control U and control D so if we go to like a longer file here if I go to the LSP config file scroll down like this which I really like and you scroll up like that um now let's take a look at another [Music] one illuminate illuminate is probably I don't know not everyone's going to want to illuminate but I think it's nice um so we'll add this and we'll do illuminate. Lua like that and oops it's funny how you mock buffer lines I am like I want to start a movement like and I buffer line don't put buffers in your don't put them up there don't do it just don't do it you're you know what objectively you're wrong if you do it it's a it's non-negotiable we're not putting buffers in the buffer line anymore um you know how some people are like really against trees in neovim like I'm really really really against buffer lines um anyway Let's uh what what was I doing oh yeah uh illuminate illuminate is a simple one it just uh shows you like well you'll see it's almost self-explanatory so we're just going to pass it here uh the hard part about illuminate is that you have to kind of have this big long deny list um but I don't know it adds a little flare so now if we're you know we'll go to like LSP config here and you'll see like see how it highlights it I'll kind of scroll in it highlights the uh the word under your cursor but it does it smart it does it like it's smart enough to know like it does it based on the language server so yeah so you can see like buffer num is highlighted there like vim's highlighted there API so on so forth right so that that's how we can do that requires highlighted specs highlighted the string is highlighted there you go what is the best tree file explorer to you I use MVM tree um I think Neo tree is probably fine too but I will say that I really like um I like oil I don't know if you guys have ever used that but it's very neat so let's uh let's install oil really fast and then maybe we'll do a fun plugin after oil I don't know why that didn't let's do a oil yeah there it is all right so let's grab this one extras and we'll do oil. Lua in there I'm going to go like this I'm just going to give it the floating window like a particular size and whenever I press the hyphen key in normal mode that's when it's going to open it up okay so now we're going to go back here spec user. extras. oil all right we're going to install it and now we press it and there you go and now we have like this kind of interesting thing where I can uh I can like add a bunch of different files and directories and like I can kind of like add them all at once so if I wanted to add like under user under this directory right I could do like test. Lua um something dop uh test.js right and then I can save this you know and then they're there so now if I go inside of Lua and then next to user you can see I got something. py test.js test. Lua it's kind of cool I think it's kind of neat that I can do that and so what I like to use it for is I because I try not to use the tree like if I don't have to if you are going to use the tree let me also give you another tip um and I found this tip on Twitter if you are using the tree all right you can see that we're in like this tree context over here notice that I actually keep my my uh uh relative line numbers and the reason that I do that is because like okay what if I want to get all the way down to launch here or lazy right like I'm up here on this co-pilot file right like come over here all right and now I want to come down to telescope well what you might be doing is this or maybe you're holding it and then you get down to telescope right but that sucks or maybe you're doing space g and then you like go up right but that also sucks so instead of that we can do 24 or you do uh yeah 24 J enter right if I want to go up here to Json LS right I could do 18K enter see how nice that is so I don't have to like go like this right I can just like when I'm in this tree context and I want to select a file I do say I want to select neoc scroll up there I do 23k enter right and it's just nice to move through the tree like that um but if you don't want to use a tree then sometimes you just have the context right here with oil so oil opens up in it doesn't care about like your project level context it cares about your directory level context so like I'm in whatever I'm in this you know it it tells me what path in. config Lua user extras so then I can do like Tabby right I come down here and do like this and again it's like a buffer so like I can use this and I can like edit it and I can add as many directories and files and all that kind of stuff as I want which I I really like that um let me also really quick add some Auto commands cuz cuz I never got around adding the auto commands so autoc commands is not going to be a spec it's going to be just something I require and we're going to call it autoc cmds like that I guess we'll do that we'll do that and do auto commands like this I'm just going to grab all these and I'll talk about what they are Auto CMD St oops um this one's useful why is this one useful because sometimes you're doing a comment like this and then you press o and then oh it gave me another comment which some people might like that I freaking hate that so this this thing is is going to get rid of that you can't actually pass it as a option because even if you do pass it as an option if you set the format options and you don't do it with a uh Auto command uh there's actually like another Auto command in neovim that will automatically like reset this so you you you have to do it this way um I like to press Q to close a lot of different types of Windows and that's what this does so if the file type is nrw or any of these other guys if I press Q it closes it so right now if I have oil open right if I just have oil open I press Q nothing happens I I wanted to like close that window um let's see here uh this is command win I think that's when I like enter like this weird Q thing I don't know I I I don't like that weird menu that I get into so whenever I open it I think I just I think it just quits I think that's what that's for uh this is good for keeping consistent sizes for buffers this is good for when you enter something you get all of the new updates uh this is good for right now you see I'm yanking this line but I'm not getting any highlight feedback this is going to give me some quick highlight feedback that I yanked the line um this is setting wrap and spell for get commit and markdown and this is an interesting one if you're using LS snip sometimes you might encounter some really weird Behavior CU you might be in the middle of a snippet and if you're in the middle of a snippet and you don't complete the snippet then you might accidentally press the Tab Key later on and then it'll just shoot you all over the file and uh confuse the out of you so this is like kind of like a nice thing like if if I do forget to complete a snippet and then like I I'm in some other context as long as like at some point I leave my cursor somewhere for like a second then it it'll just uh kill that that snippet context that I was in hopefully that makes sense if it doesn't make sense just trust me that it's useful all right and so yeah now if I open like oil I can press q and then just some other niceties that are in those Auto commands holding Jay takes me almost as fast down and up don't hold J trust me I have some bad habits in neovim that I've I've cultivated over the years and I wish I didn't have them um get out of the habit of holding J um one thing that I really like that almost seems like I might be doing J or something like that is the scrolling that I'm doing right now right so it's kind of like if I'm doing control down and up um but it's it's it's much better it's much faster so like if I'm in a long file I can scroll through it like really fast and then once I am in a viewport that I want to be in then I try to use like a um a uh a relative line number and like jump over to that thing whatever it might be control D yeah control D and control K that's the contrl J and control K is what I have mapped to control D and control U so when you see me doing this this is the same thing as control D and control U it's just that I have neoc scroll so I get this smooth scroll all right all right let's do uh I mean there's boring ones like get signs and things like that I mean we can always do those but let's do um let's do something a little more interesting let's [Music] do uh let's do um folds found this really cool way to do folds this is going to be another plugin where it's going to be super complicated you're going to look at it you're going to be like what the hell is going on there I'm not going to explain it right now but again these are these are files you can just drop into your config you can just use them um you don't even have to think about how it works so what I'm going to do is I'm going to create uh another well we're going to try to use oil here so I'm going to go we'll do a six go inside here and then I'm going to do um it's called UFO so we're going to do ufo. Loa all right and we're going to go like this I'm going to paste that in there you just got to trust me and then we're going to require it as a spec user. extras. UFO and we start it up okay and so now we have folds we should have Folds yeah once the language server turns on we have folds so you see all these little arrows there we can get really cool folds we just press Za Za Za Za Za and now we got all these nice folds right and so this has been the most intuitive way that I have been able to use folds so far in new I've been trying to use folds for a while um and I just it never really felt intuitive it never really had like a good UI to me at least personally um but using UFO I really like this plugin for for folds and so I've actually been using folds a lot more often so you can see how many lines are actually in the fold like this right and we can kind of see them and then we can do something like Z capital r open them all up and we can do Z capital M and close them all you know and you can kind of see all these different contexts and things so yeah big fan of this you can do it side of there like that you know you can do like um you know like sub folds kind of things like I can get rid of all these right here so that's kind of nice since status column is merged we can have epic things in the folds too yeah yeah yeah and so that's what I'm assuming well I I'm not really even sure honestly I don't really know I mean I'm sure folds goes deeper I just learned like about UFO and some of the other cool stuff that folds can do um recently I really like this ability to know how many uh how many lines are inside the fold too um and I really like the ability to like set everything as folded and then set everything as unfolded because it's just nice sometimes you'll be in a file you just want to be like okay what are all the functions in this file you know and you just fold everything up like what what am I working with in this file like what is all the top level stuff and like you can also see like if this was a function like a Long Function you could see like oh this function has like 50 lines in it so I might want to refactor that function and like break it apart or something you know so something something that uh you might want to do and then you can work on one thing at a time too so like it's like all right I I can close everything and then it's like okay I just want to work on the toggle inlay hints function so you just open it up here work on it close it up come over here open this one up take a look at you know what I mean so it's kind of nice open them up there you go all right so that was a neat one I think uh every now like now we can we can probably start doing some cool ones uh I'll probably just add well we do get signs and Neo get they're kind of neat too but um they're not like super new to me uh how about um lab I don't know if anyone's ever used use that um I still have a lot of viewers right now so I'm going to I guess I'll keep doing this I was going to stop like if people stopped watching I was going to like you know whatever but I still have like 70 something people watching which is a lot like for me so I think uh I guess we'll keep going um so let's do lab. infv that's like a neat one that I've been playing around with lately so we're going to do go over the config here and these are extras I won't like include these as like the base config stuff but let's do um let's do lab okay it's a simple con it's a simple plugin to set up for like the cool little features that it has so let's do okay we're going to do um and also if anyone has any interest in uh some Tailwind tips for working with Tailwind um let me know and then maybe I'll go over the the tailman stuff too so okay let's do we're going to do this do that that that and we're going to do um lab. Lua save that I don't know why I didn't open it up I'm gonna toss this stuff it's not really super useful all right and oh yeah I forgot to include it spec user. extras. laab that'll install it for us and now what we're going to do is let's just create like a little uh a typescript file I guess like index.ts okay and that we'll do um I don't know I don't think about it let's do uh function test console. log test or we'll do a return let's do uh we'll do like add okay and we'll do um a number B number and then we'll do um you know return a plus b okay and so you can see we don't have like the inlay hints and all that kind of stuff right now but I'll uh I'll add inlay hints to typescript later uh great stream dude it' be great if you could repeat it more in the future well I'm I plan to do like individual plug-in reviews in the future but this one's going to be like more right now I'm doing a couple goofy plugins just because I think they're fun to do but um this one is going to be hopefully like a reference stream that people can use for the rest of the year to like set this stuff up I don't know this has to be somewhat useful so now what we're going to do is we're going to do um we're g to do add all right and we're gonna do we're g to say well we'll do const uh yeah we call it sum I guess there you go is that and then we'll do console.log sum okay and so now you know if I do like bun run index.ts there you go you got you got the sum all right right but imagine that I don't want to do that right imagine that I don't want like I could like open up like a uh I could open up like a terminal here and I could do like FN run I could run it in the terminal too right you know you get the answer um but imagine that I don't want to do it in there so let's close that imagine that I just want to see it in here so we can do uh lab code run there you go so now I could change this to like eight and save and you can see it updates with 11 I change this like 11 and save updates to 19 and yeah so you you could kind of think like if you're like prototyping some function here or if you're like trying to learn algorithms maybe or something like that uh this can be kind of neat um and you can even see like if we do console L well no uh console why can't I type console do sometimes when I see like the stuff like laid out there it like makes me type slower I have no idea why that is uh a right so I'll save and you can actually see a is a okay cool and console. log B what's B B is 11 right and so you can actually console. log within the function too and again it'll change as I change this so if I change this like a three there you go so I think that's kind of neat um that looks like a cursed vs code color scheme it is a cursed vs code color scheme I've been working on it for a while though so I think it looks pretty nice I have like weird things supported in this color scheme that like uh I doubt other color schemes have supported like like special semantic uh language servers stuff for particular languages and stuff so uh do you use a tying window manager I was using a tiing window manager for a while um I just haven't I haven't been able to reset up a lot of my Linux stuff lately I don't have I don't have I only have my I only have a Macbook right now so I don't have like any other machine so uh you know I I have nothing to really run Linux on like I I have my old system 76 laptop but it just can't handle streams like like this MacBook again yeah the lab one is definitely cool uh eventually I do plan to come back to Arch and hyperland at some point yes all right so uh let's keep going what else we got uh we'll probably do some basic stuff now that we kind of went over that uh if few all right we'll do one other stupid one you guys ever use a cellular automaton this is a neat one all right uh we'll do in. Loa here and we're just going to do we're going to include a spec user. extras do uh cellular auton yes like that okay and we'll come up here add cell- auton how do you spell this Tona add that I must have spelled it wrong but who's surprised cellular Auto did I spell that wrong oh okay I see where I spelled it wrong all right install that one and we'll open up that index file again and now like if you get like frustrated with your code you can just do oh no it didn't work how come it didn't work what do you mean argument required since when is an argument required I guess there has to be some sort of argument I thought I heard something anyway yeah you know that's kind of funny I think uh Make It Rain there's another one called scramble which is kind of funny and uh then there's another one called Game of Life you can kind of watch him like oh I think this is one of the funniest plugins it's just kind of neat anyway um how I could make an autoc command to run Mac ma Mason install all at the start of neovim that's not something you'd want to do you'd just want to put insure installed inside of Mason I'm also a Mac OS and use you buy have you heard about it yeah I've heard about it but honestly I I don't think that I need much more than just alt tab when I'm on Mac like I just literally alt tab between things and it pretty much works just fine and then like if I want to move between instances of the same thing I just press command uh command Tilda that pretty much handles like like most scenarios for me um okay we got that um Auto pairs is kind of boring but we can install auto pairs I guess uhoh am I having like a freezing moment here eyeliner is kind of nice too this is another simple to setup one that I think is actually pretty useful so we'll keep it in the extras eyeliner DOA it's like quick scope but it's written in Lua so if you ever used quick scope before see so it'll just highlight the first of a word so that we can jump to that word so if I press like M I'm going to jump to that right I can just like cut it and you know do whatever I got to do so it's kind of nice if you're you know um you know you want to jump to something you want the fastest way to kind of jump to that thing um this will all be updated in the repo later on U I'll probably I'll probably up upload it tonight this this is uh going to be a pretty long stream though I mean we're we're getting there I want to get through some of the other Basics though um again so let's uh let's do testing I don't know testing is something that a lot of people want all right so we can do testing so let's go take a look at U Neo test I'm actually going to put this in the core config because I feel like this is this is core but even if it's not core it doesn't really matter that much like again you can just go through and delete these files if you don't want them so we're going to do neot test. Loa we're going to paste this there all right and now what we're going to do is we're going to go to in it. L there and we're going to put it here so we're say spec user. Neo Neo test like that start it up and I need something that's using v i was learning a little bit about types recently from uh so I didn't buy the course because I can't well yeah I can't really I will say I can't afford a $590 course but there's a cool course out there called total typescript and I was kind of just going through all like the little uh the little like challenges and stuff like that um now I remember the like the little beginner one that's like really easy to go through um but it has some tests that we can use to kind of like test out our testing abilities here uh let's do uh mpm let's do bun I no all right then let's do mpmi yuck I hate using mpm actually I think that ended up I think I have mpm Alias to pmpm so that's probably why even was as fast as it was um and now let's open this up I know there's tests in here somewhere when I was playing around with it okay here we go we got a test uh what is this oh implicitly any yeah so we want to change that like number like this and number like that so I'll make the error go away um and now we could do space t and test nearest and it says no test found um reason for that oh I know why that is um so you have to name the file in a very specific way so we would have to go into Source here and we would have to do number problem. TS and then number problem. TS and then we would uh do like do test.ts right and now if I do space TT and it failed why' it fail feel like it shouldn't have failed um no test files found this feels like it's correct it feels like that that test should have passed oh VI test is not executable interesting you would have thought that I would have installed that there but I guess we could do mpm I flag gvi test uh let's do PN pnpm setup okay and now if I do mpmi F test all right well this is starting to annoy me maybe I should just use mpm unable to find that pmpm setup to create it automatically set up with global pin directory blah blah blah blah blah blah blah maybe I need to reopen my terminal here that probably might be it oh uh now let's do do mpm that now this isn't the ideal way um that you would do this but you know it will work Why didn't it work it should work I literally just had this working like recently like I don't know I think maybe what we should do and then what I'll do is uh config zsh aliases what oh and let's stop aliasing that for now all right and now let's do mpmi now we're using actual mpm I would assume this should fix it hopefully yeah okay now we have testing working so I guess the moral of the story is if you want to use this you probably shouldn't be using pmpm because pmpm the way that it works is it puts all of your dependencies in like a single place like not actually in the node modules folder and then like it's Sim links and then I guess throughout all that it somehow loses the ability to like reference binary files because the way that you typically would reference a binary file would be to go into node modules. bin like that and so now we can see that in here is VI test so for some reason um it's it seems uh if you use pmpm that that that binary will not be available to you and I'm almost 100% certain that that is how um this testing plugin works is it goes and finds that right there so that's a you know a little gotcha that might you know bother you in the future but anyway we got testing so that's kind of nice that testing Works hey how's it going Andrew um how do you folder icons when running LS LSD now it's actually um EXA but I don't think X is even a thing anymore do I use toggle term I guess we could do toggle term hey Chris is this for launch. envm yes this is launch. envm all right so there's testing testing is like easy right and so like okay let's go take a look at how I did that um you do neot test and for this we were using uh v test and so to get v test to work we we added neot test v test right and then you can see I got other language like python plener rust Zig bash whatever right but for instance this is this is us using v test and uh then all you do is you bind a command in this case I uh used witch key and I binded it to leader TT and that'll test the nearest test and so we just do like neot test. run. run um we could also do adapt if we wanted to with the debug adapter stuff um I don't have that done right now but we could set that up I guess and then these are just all the adapters right so you would just set up the adapters the adapter for the one I just did was the uh Neo test v test so that's that's how I got that working yeah e is the fork maintain of EXA right yeah yeah I mean that's gonna be the same thing for pretty much everything uh be the same thing for like Russ that's all you got to do is you pass it down here uh as an adapter for the most part you do the same thing with whatever else you know python whatever it is and then you'll get it working um you should read the docs a little bit um if you want to read the docs for these kinds of things uh it's pretty simple you go to Neo Neo Neo test and there you go you can read over this this will explain a lot of the stuff to you and yeah so you got a little testing framework I mean you probably didn't expect us to get all the way to testing you know I mean how many videos have you actually seen people like actually get testing working in the of them especially after doing all the that we just did so it's just really nice when we have this modular kind of config where we can just kind of Pop modules in and out we don't have to think that hard and you know this is going to be a useful module no matter what like you just pull this into your config that's it you know as long as you have like which you could just drop pieces too like I I fully expect you to like take this code you know and like copy and paste the pieces that are useful to you um you actually using Mac OS yeah for now I am I needed something that uh would have a long battery life and that I could like work with outside like at cafes or like out in the world and like my I for a while I had I had a um I had a system 76 laptop but it just dude the battery life just couldn't handle it like I just I couldn't bring it with me places and also it would get really hot it got so hot that the feet melted off the bottom so I was like you know what just give me something that is going to like I know that it's going to work and you know again these these uh the new Apple silicon chips are just like crazy what's neot tab all right we can do neot tab just because you pointed it out so let's grab neot Tab and I'll explain what it does I actually put a tweet out today about neot tab so you can go take a look uh at that tweet and you might get an idea from that too but um I don't know why I opened this up uh I'll consider this an extra so we're going to call this neot tab do there you go um and so what this is going to do is it's going to allow us to easily Tab out of different pairs so the way this is going to work is we're going to also need to go edit uh CMP and instead of fall back we're going to call a different function here so we're going to um we're going to call the neot tab function uh Neo tab like this and we'll put that there and we'll put it there um now I really should probably be doing a PE call here so I'll get rid of this uh when I go and do it later but you know you can put that there and then uh we'll go to in it. Lua so we'll just you know do spec uh user. extra neot tab all right and now let's do something like this I'm just going to make it a comment all right and now if I tab through this oops see how I tab in tab to the end Tab out tab to the next Thing tab in Tab out tab The Next Thing tab out and then now it's just going to behave like regular tab right so this is nice because if I'm here and I want to just Tab out I can just Tab out of the function right um if I'm in console log I just press tab twice and then I can put like a a a a semicolon so like if I'm you know for whatever reason if I'm here Tab out that's kind of like because you almost never want to like tab inside here like you almost never really want to do that like if you like you pretty much always want to put like a comma like a comma then a space so it's just nice you can just press the Tab Key and like just jump out of that context mean the heat by the laptop is a feature it'll come in handy in the winter yeah maybe one day um no I'm telling you like the feet melted off and the battery kind of blew a big bubble too and I had a pixel die and all the paint it got so hot that the paint melted off the laptop and I was just like bro I just I you know I want to support Linux and system 76 and all these things but like I have work to do I got to get done you know I got to make content I gotta make money I got to do stuff I don't have time for my laptop sitting on fire and melting on my lap you know what I mean like I don't have time I just don't have time for like that um so yeah it's a little harsh reality but it's just like you know these you know you know big Tech Apple whatever companies like they make better and it's not even close so yeah Tab out kind of nice found that today big fan um I'm I am going to not use that like by default though in in this file I I'll leave it there as a comment so that you can uh you can use it if you want uh let's do 19j boom boom boom boom so just uh uncomment those in the future um all right let's see uh let's do a boring one because we've done ones that aren't boring so let's do um we got to do like get signs all right this is get signs it's uh it's nice to have but it's you know I've had it for so long it's like I can't imagine not having it but it's not like I'm like wowed by it anymore so we're going to do spec user. signs like this and but it I would consider it to be a core plugin get signs. bla paste that in there it will when we enter the buffer this is the name of the plugin by Lewis 6991 um I always appreciate like usernames that are just like you know some name and then just like some number at the end like yeah I don't know like they were just like it I'm just going to use whatever name um so yeah it'll either fire on the event buff enter or command get signs uh we're going to use our icons here and got this stupid freaking Emoji thing from mechos that's one big problem with mechos and yeah I mean a lot of this stuff is just basic ass config for it you can look it up the only thing I do really change is the uh is the signs because I like to use like just lines I like to use Simple lines um like simple bold lines like these right you and larve got me to fall in love with MacBooks not going to lie oh dude they're great they're just in a different class how long does the battery last uh I don't know all day sometimes I'll leave my laptop on at night in the bed like I'll be watching something and I'll just like pass out like fall asleep and it's like it's still playing like 7 hours later in the morning and it's not even hot it's not even hot it's like cold like I'll touch it and it like it like ooh like it it's like walking a cold shower you know like if it touches like my thigh or something like that I'm like oh that's cold you know it's it's never like I'm burning something or like it's not like I'm I have like a like a mobile heater in my lap or something like that it's never like that um it's a different kind of machine like you know I mean I'm not trying to be like a fanboy here for I mean kind of M though like I'll be honest it's just it's it's just different I wish it weren't the case you would think like a bunch of techy nerds would be good at making laptops and but like they're just not it's the big evil companies who are good at this thing hack Fun I use a gist mono that's the fun I'm using in this uh stream right now Apple Hardware is insane it didn't always be it wasn't always that way though their Intel MacBooks were not really that great now the shell was always really nice but like the uh you know it still had its problems okay uh so yeah good signs get signs nothing you know it put signs forget so yeah uh like if we go to this project which is in a GitHub repo we open this up and we go like that oh look there's a sign there there you go right it'll be green if you add a new line it'll be a red situation if you delete something and it'll be a blue dotted guy if you if you change something see yep that's let's get signs it does other stuff like you can stage hunks move between things preview changes but I rarely use those features although they are nice sometimes I do move between the hunks though I actually do think that's nice what do you think about takuya Matsui Vim settings I don't know what that is oh look it up can you make custom MV Chad I don't no I I can't make custom mvy Chad lately I've been kind of rethinking how best to do in the omm config and I think that this launch method is my favorite way um I I think that it's probably the best move at this point I think neovim is maturing to a certain level to where I don't know I don't know I I just think I think using something like launch is the move for most people oh this guy I know tooya I don't know how to say his name tuya mat Matsuyama I know who he is the inkraft guy oh he's just he's got Aesthetics down and he's got my laptop too the MacBook airm too he's a man of he's a man of taste I didn't feel like let's read this really quick MacBook Air is my Submachine as you may know I'm running a small business called ink drop so having a secondary computer is crucial in case the main machine breaks down I must be available well whatever I must be available for providing user support and dealing with ins just say you wanted a a nice laptop that's like light and to walk around with I didn't feel like buying another beefy computer like the M1 Max MacBook Pro so I decided to get the M2 MacBook Air it's less powerful than the pro but sufficient for looking into servers dude it's sufficient for I'm streaming on it right now I work on it all day I I don't know who the hell needs a pro what's the differences and advantages between native neim LSP and none LS n LS uh oh uh the native LSP handles language servers and the nun LS allows you to hook other binaries into the native language server API that neovim provides and if you don't understand what I mean by that then uh uh I don't really know how better to explain it basically you can use the for the native LSP format API through neovim to format using uh like a formatting binary like prettier or black or something like that rather than having to use some other custom command to run that formatter so it's it's really powerful concept using a n LS or n LS it is for formatters and linters but not only it you could you could set it up to work with like a full-on language server you know and you can it can have completions it can do all kinds of weird um you can do code actions too it's uh but you you know you can generally just think that it's for formatters and linters that's fine and LSP to autocomplete and Snippets yeah yeah you think of it like that it's fine to think of it like that yeah anyway this guy he knows how to do Aesthetics very comfy he knows how to do comfy stuff I appreciate that in a non-c comfy world it's nice to see people doing comfy stuff um what else is going on probably should do auto pairs I have this super complicated Auto pairs setup here it's actually not that complicated but I will probably just uh simplify it a little bit autop pairs. L we'll keep that we'll just leave that whatever enable have quote yeah I don't really care we don't really need all this junk all right that makes it nice and simple spec user. Auto pairs boom boom boom okay yeah it'll install it for us and now if we open up there we go some parens there you go um can you please show us you organized your Mac OS I really haven't done much with it there's nothing really to organized um yeah I mean really I just installed a bunch of apps I use Wes term I didn't really do anything else I move between my things with uh alt or command Tab and command Tilda like that's that's mainly it and then sometimes I'll just like blow things up and select them like that yes does the event lazy loading still work with the spec method yes yeah I mean we're doing dude it's it's all the same thing it's no different all the only thing that we're doing differently is we're just taking all these specs and putting it in one big list and then passing it to lazy so it's I mean it's it's functionally the exact same thing hello so early morning here though I joined as I trying practicing making my own enm config as no pre-built config MV chatter similar is not working properly in Windows well your first problem is that you're using Windows um so the solution to that would be either to get off Windows or to get Windows subsystem for Linux WSL um and then after that I well if you're just starting I don't know I mean I feel like what I'm doing is a little bit intermediate I would say some pieces are are like Advanced um if you're just starting I think getting a handle on Kickstart envm is probably the best move and then when you have a handle on Kickstart envm and you want to like learn more you can uh you can watch this stream over a few times without Snippets what's without Snippets yeah I wouldn't recommend just running linters and form matters all right so all right what's next alls illuminate telescope there's telescope tabs but that's not really super important uh we got the auto pairs thing we got comments we got that uh Neo gets something that I use I have really no good reason to show off Neo right now because I don't have like a repository or anything do recommend that you use Neo though because it's nice um kind of trying to figure out like where am I right now like with all this what is okay we're going to go over here this is going to be like my test file this is going to be that and then we'll go to uh Neo get Neo get. Lua uh you can probably ignore a lot of the stuff that's in here I just have some signs we're not going to use it with diff you right now yeah that's probably fine and so then you can open it with leader GG uh let's actually got Stop opening this file all right and so now we'll do uh spec user do and Neo open up that stupid thing again and now if we could go over to like a repository we make a change right and if we save the file and make the change you can see that we have an unstage change then we could press like s and Stage it and then we can press c c put a commit message save the commit message and then do capital P and then p and then push um yeah that's how you would do it and then we can discard this with X and get rid of that commit opens up in a tab and you can see Tabby opens up too so that we can you know if you want to keep Neo get up and like keep a track of everything you're doing and like take a look at it in the other tab you can do that I really like this intermediate stuff yeah I think the intermediate stuff is like underserved like I feel like that Middle Ground of like doing anything like I've been trying to like lately to like learn like middle like cuz I I started learning typescript uh well last year I started learning typescript and I feel like I'm ready for like that advanced like high intermediary intermediate Advanced kind of typescript at this point and um very little like actual tutorials out there that are good I'm so tired of like learning like oh this is a type and here's how type function I want to learn like infer I want to learn like um uh template types um like all the weird kind of stuff that's there like that's the kind of stuff that I'm interested in but there's very it's so it's h nobody teaches it like nobody teaches it really like that well that I've seen like on YouTube and stuff like that it's a way to sort telescope results by change time um I don't know get liner. envm yeah we have G Linker we can set up G Linker it's kind of neat let's pass that one in I still think it's kind of an extra though trust me I mean it's almost like at this point like if you've heard of a plugin like I've heard of it and and i' I've played around with it so here's a config for that uh we can get rid of this mapping this is from the old one yeah this is like just uh the way that it works it's fine though we don't really need that there spec user. extras dog Linker we'll install that and now if I open this up and I do space gy oh how come it didn't like open it up in like a I would have expected that to like open it up like in like the actual browser it's what it used to do one second how come it didn't I want that uh yeah this will probably be the main config for this year I really don't I don't think I'm going to see a lot of need to change anything I'm doing here um there's a fork of this which I think is this yeah it gives me the permal link I wanted to open the stupid permal link though oh I guess you have to put the parentheses or parenthesis uh X Point weird I don't remember having to do that before there you go you didn't see it but it opened it up over here maybe if I pull this over here and I'll do another one see how it opens it up and gives me that link there uh I don't I want it to stop opening there though maybe if I do a f for these and there you go see now I just open it right up for you go over to witch key for instance and we were like okay I want to see this particular line over on GitHub boom and you got the perer link you can just copy it right there and you can send it over to someone I evangelize elv at my college nice I have a presentation in open elv everyone goes crazy it's funny because looks like a hacker set up for them that's hilarious don't know very much of it but seems Windows NE scer would get yeah I don't know anything about Windows people need to start evangelizing uh launch now that's the next thing to be evangelized but if you use it with a vs code color scheme no one's going to be impressed the hacker part is like you got to use like Tokyo Knight or something like that because if you just use it with a vs code color scheme people are just going to think it's vs code um Alpha that's a good one hopefully I can simplify this one a little bit too we'll give it the cool launch one I made like a rocket chip I I like put this one together and it oh now we can just do this and now we got the cool launch splash screen here now if we want to open up a particular project from here we're probably going to need to actually install that uh plugin so now we'll install the projects plugin spec user. [Music] projects I call Project maybe Lua all right so now if you open up neovim you just want to open up your projects you can be like all right let me do that let me open up uh my resolver project that I'm working on and then like the layout file and then boom and then you can SW like switch between different projects as well so you could do something like um let's open up like a new uh a new t tab here and we're going to find a project and we'll do like envm or something like that and we'll do a file in here all right and then we're can to move between our different projects so we got this project here and come over here we got this project here and oh whoops I switched I didn't I didn't mean to do that so yeah so then we can just switch between our different projects so you can have two projects open at once and then something even cooler is is you could just Mark different files here um and just kind of well I guess actually it won't work work across projects with Harpoon so actually it's kind of even nice because like all the stuff in Harpoon in each project will be scoped to the project which is actually pretty good I was I thought it might be cool to like move between different ones um but actually I think this is this is probably actually better it's kind of nice that it actually Scopes it to the particular project me and my friends started using Arch and en because of your Channel best tutorials on YouTubes I found nice thank you is there a way to um yeah so yeah so projects are kind of cool like being able to do that see if we got anything else here I mean I think this was like most of what I wanted to show I feel like this is a lot of stuff one thing that's nice too actually kind of underrated is being able to use uh tab N tab 9 is like a really simple thing it's for free too it's like this free little AI you can pop in there um codium I know some people use codium but tab n I've been using for a while and it's great for just like simple just small suggestions they have like a more powerful one too um which I haven't really used as much just again cuz I've had co-pilot for free for so long um but you know one second get me out of here get what all right yeah now we can do this and uh yeah so we could just do like um user extras and we'll do a tab ab. Lua pop this in here super simple config almost nothing you just have to add it and then if we go add it here spec it's like if you just want some simple AI completions should come up with something I mean even if it's not oh okay that's this is it right here I just don't have any things in CMP for it so like if we go back to CMP really quick and like where we're doing um here I I'll add back in some stuff here now that maybe we're maybe a little bit more comfortable where's uh the Emoji stuff okay yeah we're going to add an entry source for this so uh CMP all right let's grab tab [Music] nine there one for co-pilot that I have in here as well and then I have like some highlights too I don't know where the hell they are oh here we go and we'll just put them at the top of the function here and we'll just put uh the emo ogi one and tab n or maybe we'll keep co-pilot and now there we go so like those pink little robots are tab n suggestions and now also we'll have yellow smiley face for our emojis it works with no API uh and no account yeah yeah you just install it as as far as I know works for me at least I don't know if it works offline according to your last year's video I'm using Packer but now you Chang to lazy. many good advantages to use over well Packer's not supported anymore so that's one good big reason another good reason is uh this spec with this way of doing things I really like the uh way like the concept of uh collocating the plugin and then also it's config because then I can just comment it out and get rid of it entirely um maybe we could have done that in Packer I never really did do that in Packer but that could have just been like the fact that I was just like stupid yeah some basic features are there from T9 for free which is nice that's why I like to use it oh we didn't do indent line indent Line's a neat one um I might actually keep this one like on that commit yeah because we'll do uh spec user. indent uh I just go in line like that save that do like this code and you can see now we have these little lines there it's kind of nice and they actually light up depending on the context that you're in see yeah so that's kind of nice too uh I do like the lines personally I really like to be able to see like what like what level of indentation I'm at [Music] um toggle terms another one this is another one where it's kind of just like you kind of just have to trust me with the config that I have here it's not like it's super complicated you can read through it but I don't feel like kind of like explaining it right now uh so let me uh I'll set that one up too toggle term. Lua and then I'll show you how I have it set up so that you can open stuff spec all right now we installed that and so now if you do opt or uh uh alt one it'll open up one at the bottom there if you do alt two it'll open one over there on the right and if you do alt three it'll open up a floating one right there in the center so I like to use them for different things um just depending on like what I'm doing um very often I'll just open up the floating one do some operation and then close it um sometimes I do like to open up like a separate terminal and another tab though so that's another thing I also like to do but you don't need toggle term for that toggle term mostly I use it for this I almost never use this this like this low terminal but it's there if you want it um I know some people this is what they're like used to yeah I might have actually have to look back at that fix for indent line because I know indent line had um there was some stupid problem I can't remember what it was but I just I remember just going screw it i'm pinning it into this commit I don't remember what the issue was I think it was the highlight not working I just I hate fighting with stupid things though so like once it works I'm just like all right pin it I don't care tab n is premium and premium yeah there is a premium version of tab 9 as [Music] well I think I tried to get them to use like a highlight group once in their premium plugin but I forget how that went I think they were like hardcoding a color versus like using a highlight group I was like H maybe should use the Highlight group and I got like a lot of push back and I was just like all right well whatever um let me see uh fidgets kind of nice if you want to see like um what your language server is doing when it's spinning up start that up now when I open up neovim and I open up my config you can see I got this stuff over here telling me that's loading the workspace and that it's done and now I know that my language server is like ready to go so I yeah now I can actually get completions oh better quick fix if people are still here and paying attention pay attention to this one this is the this is this is uh this is like one of the best bqf DOA boom um not a lot of config here you can look at the key keys that I have set um but yeah definitely pay attention to this one this one is uh mind-blowingly good okay so now if we go to I think I put it in extras it really shouldn't even be extras though spec uh user do um bqf or extras bqf yeah all right watch this this one slaps so if we do uh let's look for I don't know like everything in extras right so we'll look for everything in extras and then I'm going to do contrl Q I'm going to send all of that to a quick fix list okay so already it's telling me like this is from find files right and then now it's like I can go through them and then I can preview them so I'm pressing p on top of this file you see and and I'm previewing the file or I could do a and then it'll automatically preview the files for me press enter and jump into it and then come down here and it's automatically previewing files for me um but I'll press a again and make that go away and then imagine that it's like oh okay you know I mean I've already gone through a couple of these now I can mark it with M so I'll mark a few of them with M and I'll press F and I'll filter them away right and so now I can get a fine grain control of what I have in my Quick Fix list here so I can do like Mark these ones get rid of them filter them with f right and then maybe Mark these two and filter them with f and then maybe these are the only two that I actually want to work with so I really really really like this and then at this point if these are the only two files you really want to work with you come in here uh we'll set up Harpoon right and so we'll mark this file come down here we'll mark this file right now we can close our Quick Fix list and we can just move between them with Harpoon so yeah better quick fix is um that's just how I wish Quick Fix just worked in neovim anyway that's one of the best plugins that exists it's so underrated it's so great to be able to like search for things you know um pop that in a quick fix Mark a bunch of them filter them out and then also preview what's in those love that and it works with like anything you would throw in a quick fix so like if we do like a GD here or gr maybe I don't know something something see I need something that would and my brain is kind of going at this point so it's like um see if I do maybe gr yeah here we go see and so I it like I'm I'm going to reference right now but you know I still have the better quick F better quick fix and it's letting me know that these are references right so I really like that have you built tab9 config in this live um uh the other tab n config the tab 9 is in this config yeah like it's in yeah yeah see one second it eventually should come up see yeah like all the Pink Robots that's all tab n but the this part is co-pilot and then I can press contrl L and like you know accept that colorizers obviously a good one I mean we don't probably really need to go too much over over colorizer it just colors stuff so if I add colorizer do Lua like that spec user extras colorizer and then if I put like see and we do like that and it colorizes it um what's really left dressing is nice I guess I don't really see it as mandatory but you can see how this one works dressing. Loop put that in there in it put here spec uh user extra addressing and now for instance like if I wanted to create a file it won't like put it down here in the command there it'll like create this nice little thing up here so little floating window uh for that so addressing is kind of nice [Music] um I think that's most of what I wanted to go over there's some other ones matchup is really nice um medicator is a cool little thing it gives you like it like lights up like it's it's so simple but like I don't know why I enjoy it like if you go to extras here we'll add modat Lua oops Daisy spec and you see it just like lights up the current line you're on and then also let you know what mode you're in so like if I go into insert mode it turns green if I go into visual mode it turns uh turns purple I don't know it's stupid but I don't know I I kind of just like it I I almost always have it set up will this be uploaded complete I hope so which framework do you plan to rewrite your website with this year I'm probably going to do it with nextjs only because um I want to use their caching feature um to cash noer blogs and then I want my blog to be all Noster powered so that's probably what I'm going to do why can't you go to the very beginning of the live I don't know it would suck if you can't because we're going to lose tons of interesting stuff if that doesn't work do you enjoy Arch or Mac OS I enjoy Arch better but I enjoy Apple laptops better I did a small autoc command that replaces medicator oh nice yeah I can't I can't imagine that it's like a super complicated you know what I mean plugin but I just like it I just thought it was neat um uh maybe we could do nav buddy it's kind of an interesting one too nav buddy. Lua I think this from the same guy who did navic spec user. extras. Nav Now if we go to like LSP config and then I do uh what control o no uh spaceo yeah spaceo say and you can kind of navigate through different symbols and stuff I think this one's kind of cool too like with the preview and all yeah so that can be useful if you're moving through like a big ugly config file you know and you just kind of want to like do that uh do you use Luke Smith XYZ um I don't know what do you mean by do I use Luke Smith XYZ I haven't seen any content from Luke in a while though I wonder what happened to him do he get banned uh do you lazy load all the plugins what's the startup time in milliseconds oh I don't know well let me ask you a question I'm going to type envm right now and then you let me know if this is too fast or too slow or what right like am I in that file fast enough for you or is there's a too there a little too much lag there I mean that could that could be pretty laggy right like to give my config file like if I want to give my config file right and I type mm and I'm in it that fast is that uh that might not be fast enough um simil to similar to symbols outline yeah yeah but it puts it like front and center I guess so you can like move through things um there is a startup time you do m i I forget how to do it I I I don't remember the command type lazy and go to profile oh okay gotta I guess 143 milliseconds so I don't know it might be faster like let's uh let's not let's not open up um launch let's go to lazy now let's check that 128 milliseconds I don't know I mean it's it's fine for me I'm sure you could get it down lower I'm sure it's possible um but it's not something that like I'm super worried about to be honest I guess one of the startup time professionals can let me know um how good that is all right I mean I think that's good no one said anything is that good is that a good amount of speed or no I I think 100 around 100 milliseconds is just fine especially when you consider like how long it takes to open up something like vs code I mean we would all be very happy if we could open open this thing up in 10 milliseconds I'm sure that would be great but I mean it it doesn't do anything that bothers me personally um so this uh like most of this config is already up um if you go to github.com sl.com lunar vim and it's in the launch repo so I'm I'm going to be uploading the new stuff here um I'm going to be uploading the new stuff soon that has like all of the uh stuff that we did in this in this stream but you want to go to Lun launch. envm and that's that's where this config is going to be living now I see this as like a modular starter so I would expect that you would come in here and like you know take pieces or Fork it and then use the base and then just kind of like you know create your own thing out of it um or just go through and just pick out specs CU this is going to work with lazy these are all just lazy specs everything here is a lazy spec so you can just come through and you can grab a you know you can grab the CMP lazy spec here and you just install it a lazy spec and that's it is launch enm yours yeah is mine you have 70 plugins with a 29 millisecond startup time nice yeah it's pretty good oh man I haven't taken one sip of anything during this like entire stream I don't know why I just took a first like drink of something I should have been drinking through the entire stream because now my throat hurts no I've never done that I have um I have heard people say that um that it like heals you or something like that but I'm I'm pretty sure they're trying to trick me but yeah so this is all going to be what is buff delete do I use this I think I do use this for stuff I can't remember exactly what really yeah know I'm probably going to avoid it but I'll take your word for it not sure about humans I believe you uh Chris do you use uh swam to manage python VMS I have a medium article on this medium.com am I not signed in oh you probably can't even well I don't know you might not be able to read it without a medium account oh really maybe it's like a user or something let's go to her and then we'll see if that's how it works at got to do at at um Chris at machine and you could take a look at the debugging and testing python code I think or it might be Advanced pyite and LSP configurations or it might be lunar as a python ID one way or the other I did I I have used swim before I think that's been their uh homepage for a while anyway listen uh Chris can you buy me a USB listen I have no money uh you sound drunk I'm just tired this was this was a long stream man um I have no money I'm unemployed right now all right so you can buy me a USB dock for my MacBook um yeah we're in the same boat yeah I I plan to write more stuff on medium but I also plan to write more stuff on noer I created like a blogging platform that I have to update on noer called blog stack. and it's like medium but um it I need to figure out how to do well I have to update the entire site uh Andro and uh Muhammad help me with this and um yeah so it needs better um like uh algorithms and things like this uh but at some point I plan to get it all working and hopefully it'll hopefully it'll be good but if you go to like if I go to I think it would be well I would have to go to my MB and I would have to sign in let me log in really fast with my extension here I don't I'm not logged into Albi right now but in the future yeah I mean I plan to get this working and then this is how I plan to do all my blogging I would just blog and post it onto here and then it would like simultaneously whenever I post onto here would post onto my uh post onto my own personal um website oh I'm not job hunting I'm not doing that I'm just uh I'm doing contract work for Bitcoin is launch fim the config that you're editing in your stream yes yes it is all right I'm tired I've had enough this was too long but hopefully we all learned something today I learned something today um so learned a few things today but um yeah I'm going to get this config up probably tomorrow I'm going to like go through and just make sure everything's all good and uh and um then this will all be available so you guys can go through again like I said like take pieces like do all that kind of good stuff um now repeat it in the F I'm not repeating this in the future that's not going to happen this is what you have for the year basically for like basic neovim stuff for me um if I'm going to be doing neov stuff in the future this year what I plan to do is um just do like individual plug-in reviews and like like just showing them off and showing like how cool they are but not like going like in depth because in-depth is like difficult and again you know in-depth uh videos and stuff like that I don't know how like I think like I'd rather just show somebody like how to set it all up and like get going and now that this exists like I can just be like yeah you could start with like I don't want to like walk you through like how to set up like CMP and how to like set up uh language servers and all this kind of good stuff you know like I just want to be like yeah you could use like launch like that's like the config I'm going to be using and then like you know um I'm just going to like add like a lazy spec and then like show you like how this plugin works or something like that so I'll probably do videos like that in the future but I'm not going to go like into real nitty-gritty like I did in this video do a topless stream yeah maybe um it was fun yeah it was fun it's been five hours that's wild um the hardest plugin you made in L I have like some failed plugins that I've worked on um the best plugin that actually works is breadcrumbs probably but it's like this this really simple plugin I like worked on a plugin for a little bit like trying to do like uh bookmarks and things with like a equal light database that you could like keep across different um you know uh instances of neovim like you could like version that across um but um but like it works but the like some of the finer features like don't really work that well uh you can do stuff like answering questions for new of beginners yeah I might be able to do that at some point but yeah hopefully this cell phone um all right I'm going to get out of here before I get like sucked up if there's any last questions remember like the stream like it like it put the thumbs up uh subscribe do all the good stuff there's 55 people here there your bare minimum be 55 likes I'll put a nice thumbnail on it later you can bookmark and save it share it with your friends um and just you know come back and re-reference some of this stuff like later on um when you're when you're trying to figure out how to do stuff in your config or whatever I think this will be helpful for tons of people I think even like even people who are somewhat Advanced like I'm sure there's at least small things to learn here uh keep going tonight no we're done tonight that's it I'm I'm cooked so um yeah I'll probably do like simpler streams in the future and then also I've been doing like um like little things on Twitter ah ah not signed in I thought I was signed in can I do like just go to my thing yeah okay good I can't see all of my tweet what a nightmare what a nightmare it is what it is but anyway yeah I've been putting like little tweets out and stuff like that so I got to figure out how to do like shorts and stuff too right all right guys well um hopefully uh this was useful happy New Year uh keep a lookout for more videos and stuff like that in the future follow on Twitter for like small little tips and things like that and um again like subscribe become a channel member support me on GitHub um all that kind of good stuff and I will see you guys in the next stream or the next video and yes I am like a quarter of
Info
Channel: chris@machine
Views: 28,886
Rating: undefined out of 5
Keywords:
Id: KGJV0n70Mxs
Channel Id: undefined
Length: 313min 15sec (18795 seconds)
Published: Tue Jan 02 2024
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.