 Today, I'm sitting down with a guest here. I'm going to interview a NeoVim team member, TJ DeVries. Not only is he a NeoVim contributor, he also writes NeoVim plugins. He also is a YouTube content creator. He's got an excellent YouTube channel, so I thought I'd throw that out there. But of course, I don't want to introduce TJ. I want TJ to introduce himself. So TJ, tell us a little bit more about yourself. Hey, everybody. As mentioned, my name is TJ DeVries. I'm on NeoVim Core. I've been on NeoVim Core for a few years now, and I started contributing to NeoVim. Actually, my first contribution, which maybe we'll talk about today, was all the way back in probably 2016, 2015, when I was still in college, and it really changed the way I thought a lot about software, which kept me sort of intrigued with the project for a long time. I've also made a couple pretty popular plugins like Telescope, which is a fuzzy finder for NeoVim. And as mentioned, I like to make YouTube videos and stream on Twitch, which has been kind of wild and a different experience. If you had asked me a few years ago if I thought I would be coding on Twitch live and people would want to watch, I would have laughed very loudly. So yeah, that's it about me. Yeah, it does. It's that way, especially as you get older, you'll be surprised how many twists and turns life takes. You'll end up in places you never thought you'd end up with. How did you get into programming and development? Yeah, so that's kind of a funny story. I think when I was in high school, I was always interested in sort of computers, and I had done a lot of stuff just with the computer. I was definitely like the computer guy of the family and whatnot, but I didn't have anyone in my life that knew anything about programming, right? And so when I heard that there were programming languages, I always thought that to learn like a new language, it was like learning a foreign language, and I really didn't like my Spanish class. It was like memorizing stuff and all these things. I was like, I hate memorizing things. I like math and like learning the rules and then using the rules to solve the things, right? And so for a long time, I was pretty certain like, oh, computer programming, that's for like other people. And then in college, I took a software course. And as part of like my liberal arts education, I was like, oh my goodness, you know, I was like, this is just problem solving. This is amazing. So I was a mechanical engineer. Before that I was on track for mechanical engineer by switched to doing computer engineering with a minor in computer science. And so ever since then, I've been I've been hooked definitely. And I've fallen in love with programming for sure. And people that are people that are mathematical people, typically can handle programming, like it just makes sense. I was kind of that way early on to all of my training as far as my college degrees and all were in music, which music, there's a mathematical element to it. There's some physics behind it. Yeah. And you know, programming just always kind of made sense to me at a young age too, back in the early 90s, mid 90s, especially once the web got started learning, you know, HTML and then you know, PHP and all of that stuff, all the web languages. It made total sense to me and I was the same way in high school, I took Spanish and I hated it. I didn't hate it. I mean, I passed the class. Right. But if you ask me any Spanish now, yeah, I couldn't tell you anything about it. Where I still remember, you know, some ancient code from 30 years ago. So you're now working on NeoVim, you said you're one of the core team members. Yep. When did you get started with that? So I first heard about NeoVim actually pretty early in the project's history. I wasn't really involved in sort of like the genesis of NeoVim or anything. I wouldn't have even known how to like build a project or do anything with Git at the time, you know, but a co-worker of mine was a VIM user at an internship that I went to and I was like, oh, that's interesting. Like, why does he do that? And we talked about it and he was really, I just respected him a lot like as a programmer. He taught me a lot of stuff and it was really exciting. And so I was like, okay, I'm kind of playing with this. And then another one of the interns was like, dude, there's this new thing called NeoVim and you can like write plugins in Python and do all this stuff because NeoVim has this remote plugin API. And I was like, what? Like this concept of writing code for my editor, right? Like writing code to write code. I always thought that that was cool. And lots of projects that I've worked on since have been related to that. That concept. So I was like, oh, man, that's awesome. Let's like, let's check it out. You know, so we're, we're hacking away downstairs in the, in the interns room, you know, like writing code to like make stuff easier for us to do our jobs. And then since then I was, I was hooked. And then actually during that summer, we were playing with like status line stuff. And I, and I wanted to center something on the set status line. Like that seems like something you should be able to do without like writing a lot of code. There's already all these other things. But it wasn't possible at the time in NeoVim. So I, it's, it's funny because it was just, I didn't like think about it at all. You know, I just like started writing some code and like, I didn't know what I was doing. I like had to Google how to do a GitHub pull request and all this stuff. And like I submitted something and it was very, it was just so like, you don't know what you don't know. And I was just shocked with all the stuff that I learned about, oh, like, here's how you can write tests. And here's how you can do a rebase for your PR. And here's all these get things, you know, and so the, the NeoVim community in that PR was just like so helpful and kind and nice to me. And I had a bunch of people review and like by then we had like a hundred comments, you know, because it was fixing up some other things and writing more tests and blah, blah, blah. And I was like, wow, that was awesome. I learned so much from this one tiny little experience. I want to keep being involved with this editor, you know. That's like, you know, I'm not much of a programmer, typically all of my stuff, you know, when I run into trouble, stack overflow. So you mentioned, yeah, the extensibility NeoVim, it is a different world once you realize, because most people have never encountered a piece of software that you can extend and make it whatever you want. Basically, you build your editor, you program your own X editor to be whatever it is, and that level of customization when you're first exposed to it is mind blowing. It really is. And it's, it's something that I've sort of, I've somewhat coined this term that I've been working on called a personalized development environment, a PDE. And, you know, as sort of this unaccess of text editor to IDE, right, which is where people always wonder like, where do Vim or Emacs fit on those? And I've always found it kind of weird to put them in text editor. Because like, well, they do a lot more than edit text, you know what I mean? They like, I've always, especially being mostly an Emacs user these days, I hate it when people call Emacs a text editor, because that's like, it's like 10% of what it does. It's like, yeah, like no pad is a text editor. You know what I mean? And you're like, it just doesn't, and the same thing for NeoVim and Emacs. And I put a lot of those into the same category where it's like, well, the point of it isn't, it's so that I can make it the way that I like, and I can eliminate the little distractions in my day and the little annoyances and I can make it a joy for me to program, you know? And so I, so I totally, I'm totally with you, like this customization, the extensibility, you know, I've been calling it a PDE for people, which is always sort of fun. It's funny you mentioned notepad. Notepad was actually my text editor for everything for about 20 years. The only thing I ever used for anything, programming, scripting, I used notepad just because it was plain. There was nothing to it. And I just thought that was the way to go. I didn't like, like graphical programming tools. I didn't like wissy wig kind of tools because they always added extra code and crap. You know, I was like, just give me notepad. And that's all I needed. And I thought that way forever until I switched to Linux back in 2008. And then I started getting into some of the editors on Linux. And then I realized, oh, this is why nobody is using notepad anymore. These are so much better. Yes. Yeah, you can make Vim or Emacs or Neo Vim feel like as notepad-y as you want and still be thousands of times better for sure. That's like, yeah, syntax highlighting. That's really neat. Yeah. And now, and now you, you know, now you're in love with color schemes, right? So it's like, you know, that's really funny. Oh, man, the notepad too. Yeah, I was using just black text on a white background. That probably is the reason my eyesight is 20 years of doing that, right? Yeah. So that's funny. So one of the things for those that haven't used Vim or Neo Vim, because a lot of people that are going to watch this video are not that familiar with it. Many users actually, because I get this question all the time, they can't see a difference in Vim, Neo Vim. How do they differ? I mean, what is, how does Neo Vim differentiate itself from Standard Vim? Yeah, I think there's, there's obviously sort of a wide array of things. But for the most important ones where Neo Vim is more interesting to me as like a project to contribute to than Vim, because like of course Vim is awesome and lots of people contribute to it besides Bram, you know, it's not like, you know, a lot of people think it's a one man show, but it's not, right? Right. And it's not. And so it's, you know, so it's not nothing against Vim. But like for me, the things for Neo Vim that are exciting was like the addition of an LSP client. I was one of the people that worked a lot on that client. And you can go dig up some old issues, you know, college me writing up these essays. And that's built in? Yeah, it is built in. Out of the box, right? Yep. And, you know, at the time, I thought how you communicated with people online was the same way that you like submitted something to your professor, you know, so I'm writing these like long essays about why we should include LSP and stuff. And then the response would be like, seems good. Can you send a PR? You know, but it was, but so an LSP client, I think really is important, especially now I use LSP for basically every language that I develop. And it lets me be really productive inside of Neo Vim in ways that I wasn't able to be before, I think. So that's one, I think the inclusion of tree sitter for Neo Vim for those who don't know tree sitter is a library that allows people to really easily write grammars for particular languages. And it parses those into a tree. That's tree sitter, right? Okay. And, and what's cool about it is then basically like people write these for not just Neo Vim, tree sitter is a widely used platform. So improvements that tree sitter gets, we sort of get to have for free inside of syntax highlighting and all this other stuff, but it enables things beyond just, just syntax highlighting. So one thing you could do is like incremental selection, you know, where you sort of expand the selection of something. Well, you could do that with tree sitter where you expand, and you're sort of doing that semantically like I'm going to expand to this statement and then this expression and then this function and then this file, right? Instead of like, it just grows one line at a time. Right. And so there's a whole host of features that are really exciting there that I think especially work well inside of a modal editor, right? Where you could do something like move this function down. And it could understand like DAF would be delete around function. That's like a nice thing for a modal editor to be able to understand and you can configure that by yourself and write additional queries and all this other stuff, but that like technology and that it's included inside of Neo Vim as well built in is really exciting and those kinds of ideas of sort of combining and using these other technologies in a really interesting way makes it exciting to be inside of Neo Vim. And that's like been Neo Vim's focus for a while, this composition of other tools that we don't have to do everything. So like Lua, like in your last video where you talked about Neo Vim, like the inclusion of Lua is another example of like composition of existing tools that work really great. Like Lua is fast and it's simple and it's super easy to embed. So we're like, well, that makes it a great choice as a scripting language. So let's use that. So those those kinds of principles and ideas are the things that make it really exciting for me inside of Neo Vim. Yeah, and I think there's nothing wrong with VIM script. But the fact that everyone would have to learn VIM script, it's not something outside of VIM, right, would never use VIM script. So you have to learn a new language where when you pick an existing scripting language, then so many more people are going to already know the language anyway, you're going to get a lot more contributors, a lot more plugins. And additionally, like improvements to Lua in terms of like tooling or linters or like others, people write those because they're using Lua in their project, right? So that means you get to get those tools for free, right? Like just reuse the code, right? Yeah. And so there's a lot of like four matters that exist for Lua. Well, we didn't have to write them. That's nice that I didn't have to write an auto four matter, we can just install the one and then run that on our projects. That's great. So there's a lot of sort of things like that that are really exciting about composing tools, I think. And naturally, some of the questions, I'm sure you've heard it a million times, why Lua or those scripting language? Yeah. How did they arrive at that particular language? Yeah, it's a good question, I think, because there are a variety of scripting languages that have been embedded in different applications. I think for Lua, one thing that's really nice is like Lua 5.1, which is the Lua version that we have inside of NeoVim is done, as in there's no like new things that can happen to the language, the language is fixed. So if you had something that could run in Lua 10 years ago, it can still run today. And you don't have to like learn any new language features or like the evolution of what's happening or anything like that, right? So there's no no issue with breaking backwards compatibility or anything like that. So when Lua releases a new version, they're basically always major versions. So like even though they say 5.1, 5.2, 5.3, 5.4, each one is effectively a new major version and they can break any compact that they want. So in the Lua ecosystem, when you write something in 5.1, there's no expectation or thought, oh, you'll move that to 5.2. It's just like, that's the code and it exists. Additionally, by committing to 5.1, at least today, I'm not saying like, this isn't an official promise, you know, whatever. But like by using 5.1 today, we get the Lua JIT project. And Lua JIT is one of the most incredible pieces of software I've ever encountered. It just makes Lua incredibly, incredibly fast. And so so we get those things. So we get a really fast scripting language that's stable, which is great. You have an existing set of libraries. And beyond that, Lua is very simple, which is good for what you want, so that there's not a huge barrier for entry, right? When someone's just like, oh, I just want to write like one function. You know what I mean? It's not like, okay, time to get out the book to open the, you know, like you got to read six hours. It's just like, oh, just write the word function. And I put like return in there and it works. Great. So there's that. We assume everybody's a nerd, but most people when they configure things like NeoVim, they do really minor edits. They're not, you know, again, they just want to write one simple function to do one simple task. And maybe that's all they ever add to that config file. And I think the like on ramp then is a lot easier, which allows people to sort of just learn incrementally. I mean, the amount of people that have contributed to projects like of mine or in NeoVim core has exploded with the ability to script in Lua because people just like could learn the basics, play around with some stuff. And then eventually they're like, well, oh, well, I could just write some code and get and help make this thing better, right? So there's this like incremental learning when you have a really simple, stable language to build on top of is great. And then the last thing is just like Lua is incredibly easy to embed inside of a C based application. Like it just really does not take a lot of code. And there's very, very simple ways to move between Lua and C and to, you know, expose some C based functions to Lua super easily, right? NeoVim is written in C. So an example of that is NeoVim has a remote API. That's like when I was talking about you could connect to Python or things like that. Well, we expose all of those remote API endpoints in Lua with basically zero, as close to zero cost overhead as you can get by just basically exposing those C functions to Lua inside of a vim.api sort of like object. So you get all of these like super high performance really fast, you can pass Lua closures into them and get them back out this really beautiful integration that would be really, really hard to do in some other languages that aren't so easy to embed inside of C. Nice. Well, certainly, I've never experienced any kind of performance issues with NeoVim. I know some people, I'm not one of those people that have like a massive, massive config file with a lot of plugins. I'm assuming if I had like a hundred different plugins, things would change a little bit as far as a speed difference. But I've never noticed it. But typically, I mean, I have, I have a lot of plugins because like I use NeoVim for every language and I've like written a lot of plugins. So like you say a lot. How many plugins do you have installed? Probably like, I mean, I haven't counted in a long time, but it wouldn't surprise me if it's like more than 50. Oh, okay. And, and I, there's, there's a lot of ways you can like make your startup faster. But for me, my startup is like 300 milliseconds or less usually. So like, I don't, I don't find a lot of quick, you know, you'll find people in the community though that complain about software that I've seen people complain that something started in like 1.2 seconds. Yeah, that's like, dude, it's a second. Yeah. One second. So I know people who, you know, they lazy load and do all this other stuff, which is fine. And that's fun for them. And that's great. And they get theirs down to even when they've got a lot of plugins to like 50 milliseconds or whatever. So like the startup time is good. And I personally feel that NeoVim is like very snappy for me when I like watch some other editors just like how they respond to things. I'm like, Oh, it kind of like hurts because it takes like a lot longer. So I think a lot of like Lua is just really, really, really fast. Just as like an example, we've made some improvements to telescope. But when we were first making telescope, it was just all, which is a fuzzy finder for NeoVim, right? It's just all Lua all single thread all in the main process. And we could filter and sort and like fuzzy find over thousands of items without ever blocking the editor basically, which always like blew my mind because I'm like, how is this happening? We're running basically like a little algorithm over thousands and thousands of strings to match against this text. And it's happening like as I'm typing and it never feels like it blocks for some reasonable amount. So it just, I think Lua is just incredibly fast at a lot of these things, which unlocks the ability to use some more plugins than maybe you would have wanted to back in like VIM script days. Yeah. You keep mentioning your telescope program, which I also brought up early in the interview, but we didn't really explore that. Can you tell us a little bit more about what exactly telescope is? Yeah, it started off as a project that we were sort of just exploring on my Twitch stream, where I'd used FZF for a long time and I really like FZF and it's just like also an incredible piece of software that's just like beautiful and always works and you never have any problems with it. And it's like, wow, this thing is just really solid. But the problem that I had with it was it was a little bit difficult to do stuff with it inside of Neo Vim. I was looking for more customizability, more like a really easy API that I could use to compose different things together. So we just started exploring like what would it look like if we made a fuzzy finder that was specifically for Neo Vim and using a lot of the new tools and APIs that we have in new Neo Vim versions, floating windows or using different highlighting things that are more powerful that you can do over different ranges. And so we started exploring that idea with a focus on being able to customize basically every aspect of it in a very Vim way, you know, like, oh, you get to reuse your color scheme. That's great. That means the preview window that you get is exactly the same color scheme as when you open the file, you know, which was exciting and it was cool because before you might preview, like if you're searching over some files, right, and it shows a preview on the right side and FZF, it just picks some color scheme that you tell FZF to preview it with, right? Maybe it's like colored by like bat or cat or something like that. Does the preview window, does it do syntax highlighting when it does the preview or is it just a plain? In FZF, it's possible to use like some external program to syntax highlight it, but it wasn't the same color. Not that you necessarily needed, I was wondering, that'd be kind of neat for the preview too. Right. But so then for telescope, it literally is just a Neo Vim buffer in the floating window for the preview. And so it highlights it exactly the same syntax highlighting everything as if you were to open the file in Neo Vim. So we just sort of explored that idea and tried to explore like, okay, how easy could we make it to like filter over just a list of items? Like, can we make that, you know, just like three lines of code so that you can write your own little filter scripts for things that are interesting to you, right? And like compose all these things together. So that's kind of how it started and sort of like the ethos of telescope. Very cool. Very cool. You've got any other plug-in projects, you know, personal projects other than telescope, or is that the main one you're focused on? Yeah, that's the main one outside of like improvements to Neo Vim core that I've done. I have sort of a smattering of other smaller plug-ins that are mostly like, I just happened to make them plug-ins because I wrote them for myself like, oh, I made a status line plug-in, but it's just because I was making a status line for myself and it was fun, you know, or things like that. They're not necessarily for public consumption. Yeah, right. Sometimes I say, you know, I'm making this, you guys can see this and it's okay, but I'm not going to make any guarantees about what we're going to do. It doesn't matter if you put it on your GitHub or your GitLab and you put a warning on it saying, I know this is broken, don't use it, they'll still clone that repository, they'll try to use it. Yep, which is okay, you know, that happens and it's fun. But it's nice for them to know that I can say like, look, I told you that it might not work and I was right. I told you so. Yeah. Thanks for verifying what I already told you. One of the things with me getting back to when I first discovered Vim, because Vim was the first, I would say, truly extensible text editor I ever tried and I first switched to Vim probably about five years ago or so. And I remember when I started learning the Vim key bindings, because that's always, you assume that's hard, right? Well, within a couple of weeks, it just everything seemed natural. I was like, people make it out to be so much more difficult to learn the modes and the bindings than it really is. Within a couple of weeks, if you spend some time in it, not only do you know it, you can't live without it. And that was one of the things that once I learned the Vim bindings, it was difficult for me to use other software that didn't use the Vim bindings. I sent you an email a minute ago. And I wanted to do a colon queue to put out of my email. I hit I to get into insert mode. I'm like, no, that's not the way my email client works. When I'm gaming and I see people type GG for good game, I'm thinking they're trying to go to the first line of the document for some reason. My brain is wired in a different way now. Have you experienced that? Yeah, I've experienced really similar things too. I think people really obviously, so we'll take a step back. I don't know that you can say using Vim is intuitive without reading anything about it, right? Because what happens is you open up Vim and you're confused and that's like a reasonable thing to have. You know what I'm saying? You need the tutor. Right. You need to do Vim tutor. But then it's like after you do that and you sort of understand like why they were trying to do some of those things, then you're thinking, oh, like I get it. And then like the pieces really start coming into play. And I usually tell people, you know, if you used Vim or like a Vim mode in your editor for a week or two weeks, and you really committed yourself to not cheat during that time, you know, like, oh, you're not just going to start using arrow keys and the same shortcuts I was using before, you'll be able to move around as fast as you were like before that. And I think it'll be like a lot more comfortable. And I kind of think that it's like fun. And then after that, it's only upside because you start thinking about, oh, I want to delete inside these parentheses really like, okay, well, I know D is delete. And I said inside. So I use I and then I type a parentheses and then it deletes inside the parentheses. You're like, oh, that was great. I like that my brain can just sort of think about what it wants to do. And my hands will just like naturally follow. And I noticed myself a lot of times, like I have a hard time writing in, you know, Slack or something like that for work. And I'm like, oh, oh, I can't do that thing. You know, I want to keep hitting I all the time. Yeah, exactly. Or like, I hit escape, you know, a few times when I'm done typing something, I'm like, oh, right, I don't have to do that. I'm on a GitHub issue or something. Yeah. I think for me, the moment I realized I would never go back to like playing text editors, like Pad, for example, was when I needed to edit a file, maybe hundreds of lines or even thousands of lines, and I needed to do something repetitive. Yeah. And I discovered macros. Yeah, I realized I could change thousands of lines within seconds where it would have taken me days, if not weeks to do that. Right. Yeah, totally. Yeah, I love macros. We always make a joke on stream though, when I like start recording a macro that now we're under like macro pressure, you know, and so you always feel like you're going to make a mistake when you're on stream doing it live. You're like, oh, I've typed this a thousand times, but I'm going to mess it up. Well, I mean, because all of my videos, I always end up in a text editor in my videos. And typically, I'm using either Neo Vim or if I'm in Emax, I'm using Evil Mode, which is the run bindings. I'll do a macro and they'll see me and I'll get comments. Well, you could have done this to make that macro. They're always going to improve on it. Right. Well, I didn't sit here and think about it. I just was doing it, but you're going to have people in the comments that are going to, man, you could have done that like twice as fast. Yeah. Which is, which is like fun to learn, but also part of the thing that like I tell people too, I'm going to think about learning is like, you know, it's okay, especially for like macros or like search and replace. You don't always have to find like the perfectly optimal one. You can just write the one that got the job done for you in five seconds instead of taking three minutes to figure out what the right search and replace is. You're like, I'm already done. You know, that's okay. Or I'll sometimes record videos where I decide I'm going to write a script to do something from scratch right here on camera. Yep. And I'll get people trying to refactor the code or what, which is cool. But I was like, Hey, I had a problem. I was going to show you how to solve it on camera. So, you know. Yeah. And so there's, there's definitely that balance. And it's a balance that I think you have to strike if you're using, you know, Vim, Neo Vim, Emax, a bunch of these editors is you sometimes got to draw the line of when you're saying, I'm going to stop customizing for today and I'm going to get some of my real work done. And that's, you know, that's a personal thing that everyone has to decide and learn for themselves to do. Because a lot of people that don't spend a lot of time customizing and configuring their software, whether it be their text editors or window managers, whatever it happens to be, they look at those people that do spend all that time configuring their software. It's wasting time. I've actually been accused of that. You spend more time configuring your software than actually using it. Yeah. Yeah. And that's, that's part of the thing, you know, going back to that idea of like a personalized development environment sort of thing. One of the pitches that I have for that as a concept is some people find that aspect of customizing fun. And it's a way that you can learn a lot of new things, not just about like your editor, but working on things like me for plugins has allowed me to have one myself as a user, right? Cause like I consume my plugins. So I'm like, Oh, like that's not very good. That was annoying to solve that. And so I have to think about how can I fix that API? How can I make it better? But I also have a bunch of users then who tell me how things could be better or improvements or people who submit new ideas to that. And each time I do that, if I'm paying attention and if I'm being, you know, intentional about it is an opportunity for me to learn and practice how to be a better software developer overall. You know, and so it's true that maybe I'm not shipping a new product when I'm working on telescope, right? Like I'm not making any money off telescope. I was like, okay, sure. Yes, I understand. But I am getting practice that becoming a better software developer. Yeah. A matter of fact, I would say configuring your software is an educational experience for everyone, regardless of your developer or, you know, whatever. Right. If you spend real time configuring Neo Vim, for example, you're going to learn a lot more, not only about Neo Vim, but about Lua and right, maybe about the core operating system for if you're running Linux. Do you run Linux as your operating system? We didn't discuss that. Yeah, because obviously Neo Vim is cross platform. Yep. Okay. Do you ever run Windows or Mac or you're strictly a Linux user? All of my dev on Linux, I use PopOS. I have a cool System76 computer that I'm in line with. Nice. Which System76 machine did you get? I got one of the Thelio, I think, Amira, if I recall correctly. So it was a flawless box for me. Like I've never had to fix anything, which is why I wanted that. So I think they're doing great in that space of making it easy for people to just like buy a computer and it starts running. And I've actually done two whole Linux major version upgrades since I've gotten it. And they worked both types. I was shocked. I was absolutely shocked. Upgrading from one major version of a Linux distribution to the next. These days, they tend to go. They do tend to go well. Yeah. I've had some problems in the past with GPU drivers and stuff and whatnot. But that's a story for a different day, probably. But it was great. So I do all of my dev on that. I have some other stuff for my streaming equipment and things that's not on Linux. But that's just so that I can spend time streaming and not fixing my camera. Right. Now, what are some of the plugins that you use in NeoVim as far as just just a few that you can't live without? Because I think a lot of people are interested in that sort of thing as well. What do you think are some of the best plugins out there in the ecosystem? Yeah. I mean, the one that's not technically a plugin, but like learning to use the built-in LSP, I think is a really big game changer for using NeoVim. I mean, a lot of the LSPs are continually getting lots of new, you know, improvements and development spent on them. And you just get to reap those rewards for free once you understand how that works. And for me, it's great to have the same key binds and all the things for every language, you know, because I work in quite a few different languages at work. So I have to jump between a lot of different stuff. So it's great to just be like, oh, I don't have to switch between, you know, JetBrains X and VS Code Y and do all this. Right. So that's the first one that I recommend if people are thinking about, I want to use NeoVim seriously, I would say you should think about learning how to use the LSP. And it's not super complicated. I think it's relatively straightforward to get going on that. Another one, I mean, of course, like I use Telescope. Well, surprise, you know, but so we don't have to talk a lot about that because we've talked quite a bit. And you've got videos about Telescope as well. I do have some videos about it. Yep. Yeah. Hashtag yet, you know, but I do have some videos about that. And I think, I think it's, you don't have to use Telescope, but I would recommend using a Fuzzy Finder. There are various FZF plugins or other things like that. And I think they work really well in the context of like a modal editor. I have a lot of different key binds for different things that I regularly do. So I have a key bind to really quickly search for symbols in my workspace, right? And that uses a combination of LSP and Telescope so that I can filter all of those symbols as I'm typing, which allows me to navigate between a project just super quickly and easily, right? Or like, I have a different key bind then to navigate just within one document, right? So what a file I'm looking at, I can quickly do that. So, you know, combining those things is really exciting. There are quite a few plugins that build off the tree sitter capabilities of NeoVim that I think are great. There's ones like tree sitter that use that create new text objects. So that's like a text object in Vim or NeoVim is basically like a way that the editor considers a group of texts. So like W is word, right? And so you move across a word. But NeoVim tree sitter has this way to then say like, what's a function or what's a parameter or what's a list or what's an element? And then you can add new key binds for each of those, which is really exciting. Because when you're doing, yeah, go ahead. With tree sitter, you're talking about like a function, would it be able to pick out like a parameter for a variable, things like that? Would it be able to slice it up however you want? Or are you just getting the whole function? Yeah, you can write additional queries to sort of provide your own text objects, which is really fun. One that I like a lot is that builds on top of the text objects is actually called swap. It's part of this large sort of tree sitter extension. And it lets you do things like if you're inside of a parameter list, you can basically say swap this one forward or backwards, right? So if you're refactoring something, it'll take the text, it'll take the, you know, the type hint if there is for your language, like all that stuff, and it'll just swap places. And it doesn't matter the thing that's cool about it, right? Just since it's operating on a basically a syntax tree, it doesn't matter if they're on different lines or they're in different spots or whatever, or if like you're passing an argument to a function, and that argument is like a another function, right? Like if it's some like lambda in line, it will move the whole lambda like to the previous spot or things like that. So this sort of idea, and of course, you know, I know I'm talking to an Emacs user. So like, of course, structural editing, like obviously doesn't everybody have structural editing? Well, not for other languages besides Lisp, okay, not, you know, but this is sort of a general purpose way that you could do that in a lot of ways. So, so for me, those are probably like the top three that I'm really like in love with. And like I said, I think it doesn't have to be telescope. I think any fuzzy finder is just sort of like a must have for your Vim or NeoVim experience. Yeah, it's interesting you mentioned languages too. I have noticed that certain language communities gravitate to certain editors. Yeah. Have you noticed that with NeoVim, what do you think as far as languages as development communities, which ones do you think are the biggest representation of the people that use NeoVim? Yeah, that's an interesting question because it's easy for me to tell you, like Emacs, obviously the Lisp guys, any of the Lisp very scheme, Haskell, which I do a lot with Haskell, the Haskell community loves Emacs. But NeoVim, obviously Lua would be a big target, Python would probably be another one. I see quite a few people. For me, it's a little difficult because like I see a lot of people that like I know, so I don't want to over index too much, people that I know, but I see quite a few people in the Rust community. They like NeoVim because Rust Analyzer, the Lisp, is really good. And so then that allows you to have this really nice, quick editor experience that's combined with a bunch of other tools. I think Go as well is a pretty popular one because Go also has a pretty good LSP. And I think it fits kind of with the ethos of Go, right, that like less is more, that kind of like Rob Pike sort of founding mentality for when they created Go. I think NeoVim fits well. Is it like a minimalist kind of mentality you think that makes it a good fit? I think like for Go, it's just like you want simple things to be able to accomplish the task, right? And so I think NeoVim fits with that. And Go please is pretty good. And like a lot of the stuff for Go works very well from running from the command line. So people tend to be closer to that. But I don't know if I have a really great overview of everybody who's out there. Yeah. Yeah, I mean, typically how I get that is sometimes you go to specific language, communities, certain subreddits for a particular language, and you'll see like all of them are using the same text editor ID. And it's like, why did they choose that one? We need a study done on that. We do need a study. That would be fun to find out broken down by a few languages and stuff would be fun to see. And I mentioned that you have a YouTube channel and I actually have checked out some of your videos. One of the things that I noticed on your channel is you get a nice amount of views. Like you have a nice community built around your channel. So tell my audience a little bit more about what you do on your YouTube channel, some of your goals, what you're trying to do. Yeah, I think for my goals, there's sort of two different things that I've been doing. One is definitely like I post stuff about NeoVim, cool new features or tutorials or sort of information how to use a plugin or like a deep dive into a plugin and stuff because I think some people really like to learn from videos. And so that's a really fun way to do that. And I also like getting to explore those things. And then the other, I was going to say, do you find that by doing the videos you learn as well? Oh yeah, definitely. We had a series that I'll hopefully pick up again soon called Take Tuesday. So it's kind of a joke about like take two, take a second look at something, you know, and we would stream the exploration of the plugin. And I would just learn like a ton of stuff. So one of them was this really great snippets plugin called Lua Snip. And it lets you create really cool and interesting snippets in Lua. So one of the ones that we explored making was one that like examines the AST of a Go function and will return all the default values for you. Like it'll generate a snippet that has the default values, which was really cool because you know, you end up doing that a lot in Go. So I learned a ton from doing that and it's a really fun series for me. Yeah. As a matter of fact, I would say if you want to learn anything, it doesn't matter the topic. You become a teacher, teach somebody else, you will learn more than the student. Yeah. And they'll ask you questions that you never thought of like, oh, I really didn't understand how that worked. I like need to go do the work to figure that out. So that's really fun. And then kind of like the second thing is I'm working more towards making some just videos generally about my thoughts on different aspects of software. Like I made a video talking about what is a personalized development environment. Why do I call that a thing? I want to make some about, you know, like just random stuff that I think of that I see a lot of people maybe confused that hopefully we can help them along their path of learning to become better software developers. You mentioned you're using Papa West right now. How long have you used Linux? I've used Linux since college, basically. I've basically only done development ever on Linux. So for probably about seven-ish years or so. Nice. Yeah. And you got to use Linux in college. That's also nice. We had a computer lab for our CS that was all all Linux boxes, which was great. Very cool experience. That was my first introduction to it. I'd never even heard of it before taking classes. That would be scary if all you got was a Windows environment. Yes. It's like you're not prepared for anything. Right. Yes, it was good. They tried to make sure we'd learned what real life in software dev was like, which was great. Right. Seven years is actually a long time for Linux. So you've seen Linux before Steam and back when Linux was really tough sometimes to deal with. Yeah. Yeah. I mean, it's been really exciting for me to just see how a lot of it's transformed. I mean, I'm not willing to say this is the year of the Linux desktop, of course, but not willing to say that on camera. But we're getting closer, I think at least. I think we're getting closer. I think we're exactly where we need to be, to be honest. Linux is never going away. Right. And I mean, it works for me. And there's a lot of other people that it works for. So that seems great. Doesn't have to be everybody's thing. That's part of the fun of the world that we're all different people and we can like different stuff. Getting back to Neo Vim for a second. Where do you see the future of Neo Vim? Yeah. I think there's a lot of really interesting possibilities for Neo Vim's future as it continues to go on. Things that I know other people on the core team and I would like to see happen as Neo Vim's ability to be embedded in other places to be improved. So there's some really awesome projects that do that already. There's a project called VS Code Neo Vim that literally has a Neo Vim instance running. So when you type a command, it can actually run that in the Neo Vim and then sync the results back. So it works for every Vim regex because it actually uses Neo Vim. It's actually Neo Vim running in VS Code. And so I think there's excitement there. But beyond that as well, one of the long-term goals for Neo Vim from its start and that's still like on the horizon of things that we think about when we make changes and when we work is creating basically like a Vim library. As in like Neo Vim is able to be compiled into this into a state that you could like embed it as a library like a link library inside of your thing. And so you could pass some editor state and then some like command or motion or whatever and it could return to you a new editor state, which would be really awesome because then we could stop having everyone have to write their own 75% baked Vim mode for their editor. That's where I was about to ask you that because Vim emulation is horrible and almost every editor I've ever tried it in. So I think so that would be like a really exciting thing for me to see happen as well. And I think that would in a lot of ways sort of like guarantee Neo Vim has a long life, right? Because if they're the go-to place for entity Vim, we'd say emulation is not really so much emulation anymore, but like still Vim mode for your editor that has a really long shelf life I think for Neo Vim. And there's also lots of other exciting things happening in terms of GUIs for Neo Vim and more extensibility and all these kinds of things. But those two goals are really exciting for me and they allow us also in general, I think when you write code that's made to do those kinds of things to be a library or to be embedded, you end up with a lot cleaner code base that allows you to unlock new things that you didn't see possible before. You're like, oh, we could just like make it so that you could have direct access to this that we never thought you could do before and then unlocks a whole new class of plugins that no one, no one had ever thought of, you know, like Tree Sitter is an example, right? Where we like were able to then put Tree Sitter inside of Neo Vim and now you have this way to query the structure of any file. Whoa, that unlocks new possibilities that no one was even, that was not anybody's radar five years ago. Yeah, that sounds very powerful. Yeah. Well, that was really, I think I've asked all the questions about Neo Vim I had. Yeah. Do you have any final thoughts, anything you want to throw out there, anything I didn't ask you about that you wanted to get in about Neo Vim? No, I think people should just give it a try. You know, I mean, obviously a little selfishly, but I think there's there's some cool projects. I can send you a link later, a project called kickstart.envim. That's like a starter config that people it's not a framework, it's just something you copy and paste as a way that you can basically get started. And you know, it tries to set up some simple LSP and auto completion and some stuff like that. Which that's great, which it just like lets you at least see, am I interested in this, right? Is this a thing that I would want to try? Because you never know, sometimes you might like it. So yeah. Because one of the things I get, I'm sure you get this too, is I'll get people asking me about Neo Vim and other software too. But hey, how do I get this plugin installed? And half the time, or I'd say 95% of the time, it's a plugin I've never used. I don't have a use case for so of course I did. But you know, they're asking me to try it out. It'd be great if we we had somewhere to direct these people. Yeah. Yeah. And so like kickstart is a project that I've helped with and helped maintain now that is just like a way that you could exactly what says kickstart your Neo Vim experience. And then it's got a place where you can put in new plugins, you know, you're going to have to go read the read me. Yeah, you're going to have to understand how this thing works. Yeah, of course. But like, for me, that's part of the fun, right? Learning new ideas, seeing different people's perspective, that's that's good. And it's not for everybody. And that's okay. You will have to read the manual. Yes. All right. That friendly manual, as I like to say, RT FM means read the friendly manual. So well, anything worth doing does have a cost. So agreed. Well, would you like to disclose any contact information working people follow you on the internet? You got any social media links obviously plug your YouTube channel as well, your Twitch channel. So on YouTube, I'm TJ DeVries, and basically everywhere else, you can find me at tgdv. So that's TEJ underscore DV. So that's my Twitter and Twitch, which are the other places that you can hang out. I like to post what I think are pretty funny programming memes on Twitter. So if you're into that, you know, you can always you can always follow me there. Very nice. And I'll try to link to all of your your accounts in the show description as well. Perfect. Well, thank you for hanging out with me, TJ and talking a little bit about NeoVim and some of your personal projects and just about software programming, Linux, computing in general. Very cool. It's been my pleasure. Yeah, thank you for having me. All right. And best of luck to you and all of your endeavors. Thank you. All right. Peace