Vim删除特定文件的空格

时间:2013-11-12 17:39:32

标签: vim

我在.vimrc中使用了以下技术来删除行尾的额外空格...

autocmd BufWritePre * :%s/\s\+$//e

但我意识到我并不希望Markdown文件发生(例如.md.markdown),所以我有以下VimScript ......

fun! StripTrailingWhiteSpace()
    " don't strip on these filetypes
    if &ft =~ 'md\|markdown'
        return
    endif
    %s/\s\+$//e
endfun
autocmd bufwritepre * :call StripTrailingWhiteSpace()

但是仍然会删除所有文件的空白。

所以我接着尝试了以下(因为它更短,看起来更好)......

let blacklist = ['md', 'markdown']
autocmd BufWritePre * if index(blacklist, &ft) < 0 | :%s/\s\+$//e

但是,同样,仍会删除所有文件的空白区域?

这些技术似乎都不起作用?他们把空白留在文件中了吗?

关于我如何做到这一点的任何想法(目前我不得不在一个单独的写作应用程序而不是Vim中编辑Markdown文件,而且非常烦人)。

4 个答案:

答案 0 :(得分:2)

第一个功能应该有效,除非您不应该寻找mdftfiletype的缩写markdown fun! StripTrailingWhiteSpace() " don't strip on these filetypes if &ft =~ 'markdown' return endif %s/\s\+$//e endfun autocmd bufwritepre * :call StripTrailingWhiteSpace() 个{{1}}。

通过如下更改它可以正常工作。 (在Vim 7.4上测试)

{{1}}

答案 1 :(得分:0)

感谢Kevin Sjoberg的初步回复,但事实证明我有更大的问题。

如果我从Markdown文件中运行:set filetype?,那么它会报告Vim认为文件类型为modula2

我不知道如何解决这个问题,所以如果有人知道那么请发表评论!

作为临时修复,我使用了以下工作......

fun! StripTrailingWhitespace()
    " don't strip on these filetypes
    if &ft =~ 'modula2\|markdown'
        return
    endif
    %s/\s\+$//e
endfun
autocmd BufWritePre * call StripTrailingWhitespace()

...所以它检查modula2(无论是什么?)和markdown文件。


更新:好吧,这似乎是一个已知问题https://github.com/tpope/vim-markdown/issues/15,所以我尝试了建议的修复...

au BufRead,BufNewFile *.md set syntax=markdown

...但这没有帮助,Vim仍然将文件解释为modular2

还尝试将以下内容添加到我的vimrc文件中......

au! BufNewFile,BufRead *.md setf markdown

...但这无法改变格式。


更新2

修正了它,https://github.com/tpope/vim-markdown/issues/15和Kevin Sjoberg的建议几乎都在那里。

我刚刚在我的vimrc文件中添加了他们的建议au Bufread,BufNewFile *.md set filetype=markdown

的修改版本

答案 2 :(得分:0)

您的实施很简单,但有一些缺点(例如它破坏了最后的搜索模式/搜索历史)。如果您不反对安装插件,可以试试我的DeleteTrailingWhitespace plugin。有了它,您可以通过设置标志来排除某些缓冲区,例如:

autocmd FileType markdown let b:DeleteTrailingWhitespace = 0

答案 3 :(得分:0)

我意识到您解决的问题不仅仅是您要尝试设置的功能。

但是,我喜欢您最初使用文件类型列表的“黑名单”方法。因此,对于其他喜欢在这里着陆的人来说,这就是我所拥有的。

它还保存光标位置,并在删除空格后将其放回去。

function! StripTrailingWhitespace()
    " Preparation: save last search, and cursor position.
    let _s=@/
    let l = line(".")
    let c = col(".")
    " do the business:
    %s/\s\+$//e
    " clean up: restore previous search history, and cursor position
    let @/=_s
    call cursor(l, c)
endfunction

let noStripWhiteSpaceTypes = ['markdown']
autocmd BufWritePre * if index(noStripWhiteSpaceTypes, &ft) < 0 | call StripTrailingWhitespace() | endif