我在.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文件,而且非常烦人)。
答案 0 :(得分:2)
第一个功能应该有效,除非您不应该寻找md
。 ft
是filetype
的缩写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