What the hell is NULL-LS | FREE COURSE // EP 4
ฝัง
- เผยแพร่เมื่อ 4 มิ.ย. 2024
- X: x.com/typecraft_dev
Whats up nerds and welcome to neovim for newbs episode 4! today we are going to cover linting and formatting in our configuration using a very powerful plugin. We are also going to cover the history of null-ls, why its so amazing, and why we should use a package VERRRYY similar to it.
so lets configure neovim with a null-ls alternaive and see what we get!
Subscribe and enjoy!
chapters:
0:00 - intro
0:55 - review of our current config
2:02 - what is null ls?
3:30 - null ls alternative
4:00 - install none-ls
6:22 - install stylua
9:00 - rubocop, and treesitter auto_install parsers
11:47 - prettier and eslint
12:38 - isort and black for python
13:37 - what did we learn? - วิทยาศาสตร์และเทคโนโลยี
This series is amazing! I have been wanting to get into vim and neovim for a while now and you have just kickstarted my journey in the best possible way. Thanks nerd!
X2
Cool, don’t forget about debugging using Neovim. Many TH-camrs do not cover this topic at all.
I'll be working on that one!
@@typecraft_dev I got a trick one for you! Debug a nodejs project of multiple azure function 😉
@@typecraft_dev and please go more indepth with the debugers than just "yea press this, runs test, thanks for watching bye bye!".... its hard to find good info about DAP....
@@uliseslozoya2002 Read the docs also? I know it is nice to have everything handed... but reading docs and trying things out is also something that one needs to do.
it's the first time I checked every hour if part 4 appeared, you are awesome and the quality of your content/video/audio are the best
Wow, thank you!
I was on the same boat! And next week will be the same!!
This is by far the best tutorial on creating neovim config in lua from scratch. This is like kickstart but in video form. Thank you so much for this. I have never waited for any video to drop more than this series. Lots of thanks and love.
As a new Neovim user your videos have been a godsend. Thank you Chris for taking the time to create this series.
Glad you liked it!
I am getting an error with eslint_d, it says "failed to load builtin eslint_d for method diagnostics; please check your config", can anyone help please. Btw sir, great series so far, you are an amazing teacher , you even take out time to explain what the code does and not just copy pasting it, thanks a lot sir.
What an incredible resource. Nvim distros never worked for me, because configuration is impossible if you don't know how it works under the hood and making your own config is daunting without a proper starting point. Someone walking you through a no nonsense installation of nvim is exactly what i needed :)
Not sure if you know, but rubocop introduced builtin LSP in version 1.53, which is a lot faster than null-ls. There is even a section in nvim-lspconfig how to config it
that is amazing! I totally missed this and will have to check that out!
This is an amazing series. I actually feel like I'm learning a lot of what I'm configuring. Which is different from other nvim/vim config guides I've seen, where they just say "I use this" and start typing away and then say things like "Basically this does blabla" here you are actually explaining what is and what does what. I really appreciate it. Maybe I'll finally do a complete switch to nvim.
This Neovim course is simply amazing; it's beyond what I could have expected! You're doing an outstanding job!
Thank you so much for this series! I just started tinkering around with using nvim for my new editor and this series has been super helpful!
This series is the best one I’ve ever watched for Neovim! It’s file structure for the config is very modular, the setup is minimal and allows for easy modification
I've been struggling to understand the whole concept of linting and formatting in Neovim, and this was soooo much of what I needed to get my configuration working. Thanks!
Just started to get into vim a couple weeks ago. And I have to say this series is amazing ! Very clear, topic well defined, big benefits highlighted.
Keep the good work, you are doing amazing !
@typecraft - this series is absolutely amazing! You have a gift for teaching and it's enabled so many others to use and customize neovim. Thank you!
Thank you so much for this awesome neovim series! It really helps me to have a clean and organized neovim config
I think this series is the best content about nvim on the youtube right now. thank you so much!
Hell yeah thanks!
agreed
It would be interesting to see an episode on setting up lazy loading for appropriate plugins
this is the best tutorial by far on nvim and one of the few that doesnt shame you for being a beginner thanks
I’m glad you’re enjoying the videos!
This is amazing how deep is this tutorial going to be? Channel is gonna blow!
Merry Christmas nerd!
Today TH-cam recommended your channel to me, I have already seen all the videos and I have already subscribed. Neovim caught my attention but it was difficult for me to understand the configuration, so thank you for these videos.
By the way, I see that someone else asked for it but I'm also interested in debugging in neovim.
This is pure gold, thank you so much for this amazing course!
Another banger added to my favorite Neovim series
Long time linux user here, finally trying to customize it to my liking for real. Really appreciate this series. It's helped me immensely.
Great series dude!
You are making a big favour to the vim community making this noob friendly tutorials.
A lot of people including me is starting to use vim because of you.
Merry Christmas nerd!
I love how you explain everything i learn lots from your videos. Love this series
The mustache grows thicker with every video.
😂
Keep going man ! These series are the best in youtube !
You just made my day, great series!
Nice! Another one, let's go!!!
LEZGOOOO
This series is amazing. Thank you so much!
This is an amazing series. Thank you so much for creating it. One thing I noticed is at 06:50, you manually install stylua using Mason. It's possible to add this into config using the jay-babu/mason-null-ls.nvim plugin, which works similar to williamboman/mason-lspconfig.nvim (i.e. using ensure_installed in its config), but for formatters rather than just LSP servers.
Thanks for the great nvim content! 👍
Loving this series so far ❤ … btw you could you pls explain the steps to extend the nvim support for a new language say ‘go’ /Rust ? I infer we have to install tree sitter, lsp, longer and formatter right ? What would be best way to have a modular approach?
Great stuff as always!!
Fantastic video! Thank you so much!
Great content and explanation about neovim.
As always just awesome 💯❤
Thank you brother that's awesome!
here are some fixes for the issues some people my encounter in ubuntu:
1- if a linter fails to install from :Mason, then you would very probably (that was my case) need to install python3.10-venv like so:
sudo apt install python3.10-venv
2- With prettier, i needed to uninstall all the old versions of Node.js by doing so:
a- list all the versions i have in my machine: nvm ls
b- uninstalling the versions different from the latest one (v20.11.1) by doing something like : nvm uninstall v14.21.3
and voilà!
Hey! I'm loving this series, I'm really specring each new episode and testing and trying what you taught us and experimenting with it! Hey, which color scheme are you using in this video? Thanks!
Say, are there modules for working with Terraform that you know?
A very dumb question, last one I promise, how can I use one of my panes as a “principal” pane on Tmux and move panes to and out of that position?
Very accessible content, thanks, it helps alot. @typecraft_dev I do have one question though. I see that there are multiple formatters configured. I assume that they would each target a different file type for this to work, i.e. in a *.lua file only the stylua formatter would kick in. My question targets the prettier formatter. I've used it in VS Code and it handles most of (if not all) the programing languages out there. Wouldn't it interfere with stylua? The same question goes for Eslint which I know it is a general linter. Thanks you so much, I love this series.
It is so good that TH-cam suggested I watch it twice. XD
was waiting for this!! thanks!!
you've made neovim so accessible and grounded, and you sound just so normal and real, like an actual person with a realistic level of enthusiasm. was that a dane cook reference in this one? anyway, i've actually started using it and i'm really diggin it. thank you!
How do you know that is the best video tot about nvim without starting watching it, like the video before start watching
Your videos are a godsent !
Been really loving the videos, I had been using one of the big preconfiged nvim configs that was setup by my professor on our class server but it was too clunky and I didn't really understand what on earth was happening (which I think is why it felt clunky) and my goal over break has been to create my own config (and understand it). Do you think you could go over setting up harpoon (and how to get it to work with the code action esque telescope interface? Also, I have been using tmux for a while (your videos have helped a lot). Could you possibly do a more in depth tmux series next (customizing and usage)? Keep up the awesome work you've been doing!
also, so happy to see in the comments that hopefully I won't have to wait 5-6 days for part 5 lol!
thanks for your detailed and verbose videos about nvim! Appreciate your efforts
Thanks!
Thanks for another amazing episode! :) I was wondering: why don't you "require" (I mean: "ensure_installed") the additional Mason packages instead of manually installing them?
just what i needed!
Hey man. Just wanted to say thanks for the awesome series. I wanted to ask that will you be doing something along the lines of autosuggestion and auto completions?
that is the very next video in the series!!!
Hey, thanks for the video!
I had a small question/issue when installing the google-java-format.
null_ls.builtins.formatting.google-java-format,
I tried putting this in alongside the other formatters but there's an issue due to the "-" in the name. Not sure how to fix this issue.
Thanks for the series, One problem I've got here is that my neo-tree doesn't show the warnings, is there any specific settings? windows btw
this is the coolest tutorial ever i seen... and please upload a tutorial on autocompletion and snippet pls
That's just amazing! thanks for one more Nerd :)
Insta-sub!! Love your video format, things are clear and concise, helpful asides .. what's not to like ❤
Thank you! Wish you the best
is there a way to automatically take the formatter and linter installed from Mason and use that for that file type? Just like the Mason auto_install = true ?
I just want to take the time to say this man. This whole process is amazing and I learned so much and now I can finally take VIM serious and deleted pycharm and vscode. Also I am getting used to VIM and this whole proces is making it even better to code in vim. Thank you for your time putting into this free course.
I love the sinplicity of the plugin but for some reason I can’t find how to specify that the formatter should use a config file in the project root. It keeps ignoring the formatter config files for some reason. Any idea what could be causing the problem?
yessssss, keep them coming
will do!
Keep up the good work man!
for some reason, even when I past the config from your github I get the error "[null-ls] failed to load builtin eslint_d for method diagnostics; please check your config". Documentation and all other online sources I can find say that It should be set up properly. Mason has it installed too. Don't know what's going wrong. Other than that, the tutorials have been really awesome and super helpful.
same here
Okay so its not me. It worked fine for a while. But since yesterday im having the same issue :(
To resolve this issue you should put
nvimtools/none-ls-extras.nvim as dependencies and change the source to require("none-ls.diagnostics.eslint_d"), it should look like this:
return {
"nvimtools/none-ls.nvim",
dependencies = {
"nvimtools/none-ls-extras.nvim",
},
config = function()
local null_ls = require("null-ls")
null_ls.setup({
sources = {
require("none-ls.diagnostics.eslint_d"),
null_ls.builtins.formatting.stylua,
null_ls.builtins.formatting.prettier,
},
})
vim.keymap.set("n", "gf", vim.lsp.buf.format, {})
end,
}
@@nivdantas9639 hey that worked , but I haven't understood why the code that was mentioned in the video didn't work? Can you explain?
@@user-ql2vz5kn9q he deleted the comment can say what it was?
I want to experiment with the Clang Formatter, I can install it with Mason as clang-format
But, when I try to type null_ls.builtins.formatting.clang-format
I will get an error, any help?
@typecraft Awesome series. One question though. With recent changes, seems like none-ls is addona-non-grata with Lazy. There are hoops one has to jump through (I'm too low a jumper at this time to figure this out on my own) to get it running. Any chance you could run an update? ;)
With ALE I tend to have all linters+formatters enabled and then it will only use what’s available for that project. So rather than having prettier installed globally I only use it if that project uses it. Does this setup work the same way if you just don’t install the plugins with mason? Or is mason still required so none-ls knows how to use the linter? Also curious how to setup a newer one that none-ls doesn’t know about yet - maybe like biome?
This is amazing!
This nerd is an absolute legend.
;)
Hi there! Awesome series so far, it's been so useful for me switching from classic vim to neovim for better plugin support. Will you have an episode covering autocomplete functionality soon?
That’s the next one!
@@typecraft_devWow, lightning-fast reply! That's good to hear - I'm aware you have a video on it already using Packer, but it'll be nice to see your mentality regarding using Lazy instead.
Definitely subscribing for more of your content!
Thank you for your great series! I have a question. I'm following your class to build my own IDE based on NeoVim, so far there's no problem. But now I can't get the Rubocop formatting work on the same code as yours. Lua formatting worked like a charm. I don't know why Rubocop formatting doesn't. I believe I did everything I need for it according to your teaching. Thanks, anyway! :)
But how would it work for formatters/linters with multiple language support? If I have prettier installed for markdown only, would it autoformat JS files?
Merry Christmas to you too ! As a suggestion : can you make a video with the TJ's Kickstarter repo for Neovim ? Thank you in advance
maybe I can do a video on that at some point. well see
@@typecraft_dev amazing . Your series is simply GREAT 🎉🎉🎉🎉 still struggling with navigation and selecting pieces of code but will come ….
Thanks for making this series, BTW , when i installed eslint_d , and when i open my js file it is giving me an error , saying "Eslint not configured" so can you please solve it
Thanks for this content 🙌
Very cool. Thank you thank you thank you!!
just came back to make sure that i left a like on this gold of a video
Kinda like me and your comment 🙌
Strong stache and strong tutorial!
Solid Dane Cook reference!
After watching this series now things are starting to make sense, for example what each plugin does and how to use it. I was struggling a lot with setting up Intellisense like thing from Visual Studio that used be my main IDE. It was slow, Gets the job done but it's Slow, you can write code in it but it is SLow, you can debug in it as well but it is SLOw, it is SLOW and very memory hungry.
I didn't knew you are a Ruby on Rails Engineer, I am also learning Ruby on Rails. This framework is one of the key reasons why I chose Linux and Neovim. Primarily because amazing to work with but it's a pain to set it up in Windows ultimately you work in WSL (Linux for short) so I decided why not just use Linux and ditch the Windows. Because Rails is amazing framework to work with so why not.
Will it support auto complete, auto important like vs code?
Is there a way to get your configs? Also, how would you set it up on a brand new machine using your configs. I followed your videos and did it manually on one machine, but i had to reset the machine. I would like a head start on this one :)
Don’t forget to make sure prettier is actually selected for lsp formatting as tsserver can also format. Thus native lsp needs to be disabled for formatting. Any advice for eslint-lsp vs eslint_d?
I personally favor eslint-lsp mainly because that's what the vscode extension uses under the hood, and that's as battle tested as it can possibly get (not saying that eslint_d is buggy, only that If there is a bug I'm less likely to be the one to discover it). Also using an lsp directly removes the middle man (none-ls), and that means less points of failure.
Performance wise there should not be much of a difference as eslint_d's author says that his version does not bring any performance gain for vscode user (eslint-lsp) as it already does the same caching techniques.
@@cazador517 thanks for the elaborate answer!
how do you make sure prettier is selected?
null-ls lets gooo!
hell yeah!
@typecraft Please make a video on configuring git for neovim in the best possible way (easy and comfortable to work with). Thanks to your series, my neovim config had never been this amazing. Cheers!!!
Thanks for tutorial! How I can setup neovim with Java, linting, just in time compiler, etc?
Thanks for the belated xmas gift, nerd!
This is great! Following your tutorials in this series. I just need to learn how to move paragraph of text, select all occurences of a word and duplicate lines like I do in VScode. I wonder if theres a Short you can do on that. The vim equivalent to VSCode text editing
select occurrences of text? we don’t do that around here (insert black panther meme)
jokes aside.. r u trying to rename something? If your lsp is set up, you can use rename (google the command or config)
For duplicating a line, just yyp to yank line and paste.
To move paragraph of text, first select the paragraph in visual mode, and probably set up a keybind to move selection up/down or just cut (d or x) and paste (p or P)
nvim is all about setting up your own keys for stuff that matter to you.
Haha i see. Is there a vim way of doing things like that?@@lian1238
I haven't set up my LSP yet but I'm writing down things I do a lot in Vscode so I can figure out the vim way of doing it.
I'll google the rename command!
Thanks for the great course! I'm a many-year vim user and now trying to move to neovim. Still a big issue for me. We've already configured and installed a lot of plugins, but what for? How to make it index a multi-file project? How to find the definition or occurrences of a symbol? I'm using neovim exactly like vim. And for any code discovery I need to open VScode.
I have a question : i've followed your series and create the same config for my neovim , but I don't have the line numbers in my terminal when I open a file, any idea why ?
‘:set number’
Hi, I tried to install alacritty to use the nerd fonts and its icons, but not working for me. Please make a video on it.
How can I configure the installation of Mason formatter and linters (eslint_d, prettier, and stylua) via a config file? My goal is to reuse all my configurations on other computers without having to remember the specific installations of Mason linters/formatters.
What happens if the project already has its own ESLint with its own rules? Same question for Prettier. Will these linters and formatters take that into account?
yes, those tools will look for local configs, then global configs. if my memory serves me right
Just curious what is the benefits of none-ls compared to efm-langserver?
Oh, will the next video include LuaSnips? Im having huge problems setting it up correctly - just made the switch to linux and I like the customizability of nvim.
Looking forward to it,
Have a good one
On it!
@@typecraft_dev Awesome :) , got no idea what I'm doing wrong but what can you do :P
thanks for great series. I have a question to the audience, if someone was lucky to setup correctly biome for linting and formatting with none-ls for typescript and javascript files?
it seems none ls has recently had some breaking changes and diagnostics are no longer working, im going to try to swap to nvim lint + conform and see if that works. It's really unfortunate because nvim has been a lot of fun and this series got me to permanently drop vscode, but I'm sure someone (maybe one of us even) will be able to implement a fix for diagnostics soon
Autocomplete and snippets tend to conflict with using copilot. Could you address this or show a way to tackle this? Thank you for the content.
I didn't have a clue about null-ls and it was a stumbling block in my learining - thanks for the help!
Hi, I'm a newb. Despite your explanation, I'm still not sure what linting provides that the LSP does not.... The LSP will complain if the formatting is wrong, and the linting will actually correct it if I make it? Couldn't the LSP do that? I'm primarily a python and FORTRAN user for context.
great video I'm waiting for autocomplete stuff
Can't wait for another part!
When you will upload next one?
Very soon!!! One or two days