Tabs and spaces in vim

前端 未结 6 1130
生来不讨喜
生来不讨喜 2021-01-29 18:07

How do I prevent vim from replacing spaces with tabs when autoindent is on?

An example: if I have two tabs and 7 spaces in the beginning of the line, and tabstop=3

6条回答
  •  闹比i
    闹比i (楼主)
    2021-01-29 18:52

    It is perhaps a good idea not to use tabs at all.

    :set expandtab
    

    If you want to replace all the tabs in your file to 3 spaces (which will look pretty similar to tabstop=3):

    :%s/^I/   /
    

    (where ^I is the TAB character)

    From the VIM online help:

    'tabstop' 'ts'      number  (default 8)
            local to buffer
    Number of spaces that a  in the file counts for.  Also see
    |:retab| command, and 'softtabstop' option.
    
    Note: Setting 'tabstop' to any other value than 8 can make your file
    appear wrong in many places (e.g., when printing it).
    
    There are four main ways to use tabs in Vim:
    1. Always keep 'tabstop' at 8, set 'softtabstop' and 'shiftwidth' to 4
       (or 3 or whatever you prefer) and use 'noexpandtab'.  Then Vim
       will use a mix of tabs and spaces, but typing  and  will
       behave like a tab appears every 4 (or 3) characters.
    2. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use
       'expandtab'.  This way you will always insert spaces.  The
       formatting will never be messed up when 'tabstop' is changed.
    3. Set 'tabstop' and 'shiftwidth' to whatever you prefer and use a
       |modeline| to set these values when editing the file again.  Only
       works when using Vim to edit the file.
    4. Always set 'tabstop' and 'shiftwidth' to the same value, and
       'noexpandtab'.  This should then work (for initial indents only)
       for any tabstop setting that people use.  It might be nice to have
       tabs after the first non-blank inserted as spaces if you do this
       though.  Otherwise aligned comments will be wrong when 'tabstop' is
       changed.
    

提交回复
热议问题