How to uncomment several lines when some of these lines are not comments? #496
              
                Unanswered
              
          
                  
                    
                      gaoqiangks
                    
                  
                
                  asked this question in
                Q&A
              
            Replies: 1 comment
-
| 
         I ran into this myself...I couldn't find much in the world of configuration to do this trivially. That said, I did a bit of silly business in my personal config that pulls in from the utils portion of the plugin. local uncommentLine = function()
	local utils = require("Comment.utils")
	local mode = vim.api.nvim_get_mode().mode
	-- Leave visual mode if active
	if mode == "v" or mode == "V" then
		local escapeKey = vim.api.nvim_replace_termcodes("<esc>", true, false, true)
		vim.api.nvim_feedkeys(escapeKey, "nx", false)
	else
		mode = "line" -- Convert to Comment.nvim's expected format
	end
	local range = utils.get_region(mode)
	local lines = utils.get_lines(range)
	-- Recreate internal API to construct the "comment context"
	-- > https://github.com/numToStr/Comment.nvim/blob/master/lua/Comment/opfunc.lua#L46
	local left_cs, right_cs = utils.parse_cstr({}, {
		cmode = utils.cmode.uncomment,
		cmotion = "line",
		ctype = utils.ctype.linewise,
		range = range,
	})
	-- Closures to perform the uncomment operation
	-- > Boolean params enable padding
	local check = utils.is_commented(left_cs, right_cs, true)
	local uncomment = utils.uncommenter(left_cs, right_cs, true)
	local changes = false
	for idx, line in pairs(lines) do
		if check(line) then
			lines[idx] = uncomment(line)
			changes = true
		end
	end
	-- TODO: Currently, nvim_buf_set_lines has a bug where all marks that are
	-- > within the changed content region are cleared
	-- > Currently only in the nightly builds is the vim._with function, which
	-- > should resolve this bug
	-- > https://github.com/neovim/neovim/pull/29168
	-- Call nvim api to update the buffer
	-- vim._with({ lockmarks = true }, function()
		if changes then
			vim.api.nvim_buf_set_lines(0, range.srow - 1, range.erow, false, lines)
		else
			vim.notify("Nothing to uncomment!", vim.log.levels.WARN)
		end
	-- end)
	-- Re-enter previous visual mode selection
	-- if mode == "v" or mode == "V" then
		-- vim.api.nvim_feedkeys("gv", "nx", false)
	-- end
endAnd then I bound this as it's own keymap (in the same file) I pulled this straight from my config so forgive the silly todo comments :)  | 
  
Beta Was this translation helpful? Give feedback.
                  
                    0 replies
                  
                
            
  
    Sign up for free
    to join this conversation on GitHub.
    Already have an account?
    Sign in to comment
  
        
    
Uh oh!
There was an error while loading. Please reload this page.
-
For example, I have three lines, the first and the third are comments, while the second is not.
When visually select these three lines and type
gc, it will becomeI want it to become
Beta Was this translation helpful? Give feedback.
All reactions