删除VIM中多行的空格

时间:2011-01-19 18:32:26

标签: vim macvim

要缩进HAML代码,我通常会添加或删除2个空格。我添加:

  1. 进入视觉模式(ctrl + v)
  2. jj选择行
  3. shift + i进入插入
  4. 输入2个空格
  5. ESC
  6. 这就是添加了2个空格。但是要删除空格,我不会工作,例如:

    1. 进入视觉模式(ctrl + v)
    2. jj选择行
    3. shift + i进入插入
    4. 删除2个空格(带退格或删除)
    5. ESC
    6. 这不起作用,其他行空格不会被删除。我怎么能这样做?

      以下是一个示例代码:

      
       .module_1
           .pricing_details
             %h2
               Save
      

      这个想法是移动一切,所以它匹配2个空格.module_1为:

      
       .module_1
         .pricing_details
           %h2
             Save
      

      建议的解决方案使用< >现在我只想用于缩进,例如:

      
       .module_1
         .pricing_details
           %h2
             Save
      

      将上述内容移至:

      
       .module_1
       .pricing_details
         %h2
           Save
      

3 个答案:

答案 0 :(得分:7)

尝试< > 命令。您需要:set shiftwidth=2才能以这种方式工作。


<强>更新

考虑你的上一个例子,改变

.module_1
  .pricing_details
    %h2
      Save

到⇓

.module_1
.pricing_details
  %h2
    Save

可以移至.pricing_details行并点击Vjj<

答案 1 :(得分:4)

突出显示您的文字并执行:

<

使用:

.

多次重复动作。请注意,无论您的移动宽度如何,这都会移动文本。如果不是2,则可以通过执行以下操作将其设置为2:

:set sw=2

您可以使用“&gt;”以相同的方式缩进文字。

所有这些都在文档中:http://vimdoc.sourceforge.net/htmldoc/usr_25.html#25.3

答案 2 :(得分:-1)

在vimrc中:

" pressing F5 adds two spaces at beginning of line and goes to next line
inoremap <F5> <ESC>:s/\(.*\)/  \1/e<CR>:set nohlsearch<CR>ji
" also works when not in edit mode
map <F5> i<F5><ESC>

" F6 removes two spaces from the end of whitespace at the beginning of line
inoremap <F6> <ESC>:s/\(^\s*\)/\1/e<CR>:set nohlsearch<CR>ji
map <F6> i<F6><ESC>

要从段落的每一行的开头删除2个空格,只需按F5键完全所有行。

这是在我的键绑定之后建模的,用于评论和取消注释C代码(当然,区别在于正则表达式)

唯一的缺点是它需要禁用搜索突出显示,因为正则表达式始终在整个文档附近匹配。