开发者

Comments (#) go to start of line in the insert mode in Vim

开发者 https://www.devze.com 2022-12-17 11:12 出处:网络
Whenever I开发者_如何转开发 want to add a comment to an indented line in vim, I hit Shift-o (open a new row above the current, switch to insert mode) and start typing a Python comment (using #). That

Whenever I开发者_如何转开发 want to add a comment to an indented line in vim, I hit Shift-o (open a new row above the current, switch to insert mode) and start typing a Python comment (using #). That hash is then magically moved to the start of the line (no indentation) and I have to click tab a few times.

Anyone know how to work around it?


I suppose you have set smartindent in your .vimrc

See :h smartindent

When typing '#' as the first character in a new line, the indent for
that line is removed, the '#' is put in the first column.  The indent
is restored for the next line.  If you don't want this, use this
mapping: ":inoremap # X^H#", where ^H is entered with CTRL-V CTRL-H.
When using the ">>" command, lines starting with '#' are not shifted
right.

I believe you don't need smartindenting while coding python. So just remove it from your settings or add the following to your .vimrc:

au! FileType python setl nosmartindent


try putting that in your .vimrc:

autocmd BufRead *.py inoremap # X<c-h>#

This will make that the insertion of the hash (pound) sign is always indented in Python source files.


I came across this because I was having the same issue in haskell when using cindent.

You can configure what prompts the reindenting by modifying the contents of cinkeys:

I added the following to my vimrc to stop # triggering the behaviour

"when you type a hash as the first character stop it triggering reindent
set cinkeys -=0#


You may want to try Nerd Commenter, which is a plugin that allows you to add comments to lines in most languages automatically. You simply place the cursor at the line you are interested in and type ,cSpace and the line will be commented out. The same keystrokes will remove the comment to reveal the line.

So if you have:

def func():
  print("indented") <- cursor position in command mode

Type ,cSpace and you get:

def func():
  #print("indented")
0

精彩评论

暂无评论...
验证码 换一张
取 消