joplin-notes/joplin notion extension/Web Development/Neovim/Configuration neovim pt2(Another way).md
2026-11-04 00:33:23 +05:30

7.7 KiB

Configuration neovim pt2(Another way) https://www.youtube.com/watch?v=CVCBHHFXWNE https://files.catbox.moe/hyab70.mp4 https://github.com/NvChad/NvChad

nvim.zip

  • Cloning to nvim git clone https://github.com/NvChad/NvChad ~/.config/nvim depth 1

  • Initializing Restart neovim and press N when ask to bout installation of something custom.Then wait for some installation.

  • Choose Theme Press space and type th to select through themes

  • Open TreeView Using <C-N>(Ctrl+N)

  • Switch between trreeview and normal text file <C-H> to go to treeview. <C-L> to go to normal text area

  • Create new file with treeview Type a to create new file when inside treeview

  • Installing LSP In ~/.config/nvim/lua/custom/chadrc.lua add this before return M line M.plugins="custom.plugins" Then create ~/.config/nvim/lua/custom/plugins.lua and add

     local plugins={
       {
     	"williamboman/mason.nvim",
     	opts={
     	  ensure_installed={
     		"typescript-language-server"
     	  }
     	}
       },
     }
     return plugins
    

    And add tsserver inside ensure_installed like this and restart nvim and install it using the command MasonInstallAll.

  • Initializing nvim-lspconfig Add more like this

    local plugins={
     {
       "williamboman/mason.nvim",
       opts={
         ensure_installed={
       	"typescript-language-server"
         }
       }
     },
       {
       "neovim/nvim-lspconfig",
       config= function ()
         require "plugins.configs.lspconfig"
         require "custom.configs.lspconfig"
       end,
     },
    }
    return plugins
    

    Create ~/.config/nvim/lua/custom/configs/lspconfig.lua and open it. Here we store all our lsp configurations

    --  Default nvchad configs
    local config=require("plugins.configs.lspconfig")
    -- Other default configs
    local on_attach =config.on_attach
    local capabilities =config.capabilities
    
    -- For tsserver
    local lspconfig =require("lspconfig")
    
    -- Here suggestions are set to be disabled to avoid useless clutter as useless suggestions were there
    lspconfig.tsserver.setup{
    	on_attach=on_attach,
    	capabilities=capabilities,
    	init_options={
    		preferences={
    			disableSuggestions=true,
    		}
    	}
    }
    
    
  • Linting In ~/.config/nvim/lua/custom/plugins.lua add eslint-lsp like this

    ensure_installed={
     	"eslint-lsp",
     	"typescript-language-server"
       }
    
    

    Using nvim-lint by adding entry in plugins.lua like this

      local plugins={
    {
      "mfussenegger/nvim-lint",
      event="VeryLazy",
      config=function ()
        require "custom.configs.lint"
      end
    },
       {
         "williamboman/mason.nvim",
         opts={
      	 ensure_installed={
      	  "eslint-lsp",
      	  "typescript-language-server"
      	 }
         }
       },
         {
         "neovim/nvim-lspconfig",
         config= function ()
      	 require "plugins.configs.lspconfig"
      	 require "custom.configs.lspconfig"
         end,
       },
      }
      return plugins
    

    Create ~/.config/nvim/lua/custom/configs/lint.lua and open it. Type this

      require('lint').linters_by_ft={
        javascript={'eslint'},
        typescript={'eslint'}
      }
    
      vim.api.nvim_create_autocmd({"BufWritePost"},{
        callback=function ()
      	require("lint").try_lint()
        end,
      })
    
    

    Before working in project install eslint config in it by this npm init @eslint/config

  • Auto-formatting Add "prettier" in ensure_installed section. Then add entry like this plugins.lua

      local plugins={
      {
      	"mhartington/formatter.nvim",
      	event="VeryLazy",
      	opts = function ()
      	  return require "custom.configs.formatter"
      	end
        },
        {
      	"mfussenegger/nvim-lint",
      	event="VeryLazy",
      	config=function ()
      	  require "custom.configs.lint"
      	end
        },
       {
         "williamboman/mason.nvim",
         opts={
      	 ensure_installed={
      	  "eslint-lsp",
      	  "prettier",
      	  "typescript-language-server"
      	 }
         }
       },
         {
         "neovim/nvim-lspconfig",
         config= function ()
      	 require "plugins.configs.lspconfig"
      	 require "custom.configs.lspconfig"
         end,
       },
      }
      return plugins
    

    Create ~/.config/nvim/lua/custom/configs/formatter.lua and open it. Type this

    local M={
      filetype={
    	javascript={
    	  require("formatter.filetypes.javascript").prettier
    	},
    	typescript={
    	  require("formatter.filetypes.typescript").prettier
    	},
    	javascriptreact = {
      require("formatter.filetypes.javascript").prettier
    },
    typescriptreact = {
      require("formatter.filetypes.typescript").prettier
    },
    	["*"]={
    	  require("formatter.filetypes.any").remove_trailing_whitespace
    	}
      }
    }
    
    vim.api.nvim_create_autocmd({"BufWritePost"},{
      command = "FormatWriteLock"
    })
    
    return M
    
  • null ls(optional) in plugins.lua file remove the entries for formatter and lint and instead add this entry

    {
    	"jose-elias-alvarez/null-ls.nvim",
    event="VeryLazy",
    opts= function()
    	return require "custom.configs.null-ls"
    end,
    },
    

    Create ~/.config/nvim/lua/custom/configs/null-ls.lua and open it. Type this

    local augroup=vim.api.nvim_create_augroup("LspFormatting",{})
    local null_ls=require("null-ls")
    
    local opts={
    	sources= {
    		null_ls.builtins.diagonstics.eslint,
    		null_ls.builtins.formatting.prettier,
    	},
    	on_attach= function(client,bufnr)
    	if client.supports_method("textDocument/formatting") then
    		vim.api.nvim_clear_autocmds({
    			group=augroup,
    			buffer=bufnr,
    		})
    		vim.api.nvim_create_autocmd("BufWritePre",{
    			group=augroup,
    			buffer=bufnr,
    			callback=function()
    				vim.lsp.buf.format({bufnr=bufnr})
    			end,
    		})
    }
    

    Advantage : Linter runs dynamiclly rather than saving a file

  • Debugger We will use DAP(Debug Adapter Protocol) Add "js-debug-adapter" in ensure_installed section. Add this entry too in plugins.lua section

      {
      "mfussenegger/nvim-dap",
      config=function ()
        require "custom.configs.dap"
      end
    },
    
    

    Create ~/.config/nvim/lua/custom/configs/dap.lua and open it. Type this

      local dap= require("dap")
    
      dap.adapters["pwa-node"]={
        type="server",
        host="127.0.0.1",
        port=8123,
        executable={
      	command="js-debug-adapter",
        }
      }
    
      for _, language in ipairs {"typescript","javascript"} do
        dap.configurations[language]={
        {
      	type="pwa-node",
      	request="launch",
      	name="Launch file",
      	program="${file}",
      	cwd="${workspaceFolder}",
      	runtimeExecutable="node",
        },
      }
      end
    

    We need to add ui for debugger too so add this as entry in plugins.lua

    {
    
    "rcarriga/nvim-dap-ui",
    event="VeryLazy",
    dependencies = "mfussenegger/nvim-dap",
    config=function ()
      local dap=require("dap")
      local dapui=require("dapui")
      require("dapui").setup()
      dap.listeners.after.event_initialized["dapui_config"] = function ()
        dapui.open()
      end
      dap.listeners.before.event_terminated["dapui_config"]=function ()
        dapui.close()
      end
      dap.listeners.before.event_exited["dapui_config"]=function ()
        dapui.close()
      end
    end
    
    
    
    },
    

    Custom mappings for debugger Create ~/.config/nvim/lua/custom/mappings.lua and open it and type.

    local M = {}
    
    M.dap={
      plugin=true,
      n = {
    	["<leader>db"]={
    	  "<cmd> DapToggleBreakpoint <CR>",
    	  "Add breakpoint at line"
    	},
    	["<leader>dr"]= {
    	  "<cmd> DapContinue <CR>",
    	  "Run or continue the debugger"
    	}
      },
    }
    
    return M
    

    Now add this in nvim-dap entry like this in plugins.lua

    {
    "mfussenegger/nvim-dap",
    config=function ()
      require "custom.configs.dap"
      require("core.utils").load_mappings("dap")
    end
    },
    

    Finally in chadrc.lua add the mappings file too

    
    local M = {}
    
    M.ui = { theme = 'oceanic-next' }
    M.plugins="custom.plugins"
    M.mappings=require "custom.mappings"
    
    return M
    
  • Using debugger space and db to toggle breakpoint. To run debugger space and dr.