我已经在工作中使用Vim很多年了(遗留堆栈),最近我决定复制我们在那里使用的trim函数。它是:
fun! TrimWhiteSpace()
let l:save_cursor = getpos('.')
%s/\s\+%//e
call setpos('.', l:save_cursor)
endfun
command! Trim call TrimWhiteSpace()
所以我们调用:Trim
,它就能工作了。虽然它在工作中工作正常,但在家里它也在删除与白色空间一起的%符号沿着。例如:printf("Testing %2f", float);
将变成printf("Testing 2f", float);
。
主要的区别是在工作时我在Unix服务器上,而在家里我在Windows 11上。知道是什么导致了这种行为吗
P.S.这种行为也可能发生在工作中,但在Perl中,永远不会有白色空格后面跟着%的情况。在C,C++(我在家里用的)显然有很多。
编辑:让我添加我的.vimrc作为上下文。它现在真的是光秃秃的。
" GENERAL -------------------------------------------------------
set nocompatible " We are not messing with being vi compatible
set backspace=indent,eol,start " Fix backspace issue
imap <S-BS> <BS>
"filetype on " Enable file type detection
"filetype plugin on " Enable plugins and load plugins for file type
"filetype indent on " Load an indent file for the detected file type
syntax on " Turn syntax highlighting on
set hlsearch " Set highlight search
set showmatch " Show matching words during a search
set showmode " Show mode
set ignorecase " Ignore capital letters during search
set smartcase " But allow for searching by capital specifically
set incsearch " Incrementally highlight matching searches
set tabstop=3 " Set tab width
"set expandtab " Allow spaces instead of tabs
" Enable autocompletion menu after pressing tab
"set wildmenu
"set wildmode=list:longest
"set wildignore=*.docx,*.jpg,*.png,*.gif,*.pyc,*.flv,*.img,*xlsx
fun! TrimWhiteSpace()
let l:save_cursor = getpos('.')
%s/\s\+%//e
call setpos('.', l:save_cursor)
endfun
command! Trim call TrimWhiteSpace()
2条答案
按热度按时间hsvhsicv1#
它删除了百分比符号,因为它被告知这样做。正则表达式中的第二个百分比符号可能是不需要的。
通常“trimming”代表删除行尾的空格。如果是这样,那么应该有美元符号,
pgky5nke2#
substitute
命令匹配空白
\s
,重复一次或多次\+
,后跟文字百分比符号%
,并将它们替换为空,即删除它们。另一方面,下面的命令
匹配空白
\s
,重复一次或多次\+
,后跟一行结束$
,并将它们替换为空。我认为你的表达有一个错别字,你实际上在工作中使用了第二种形式。请仔细检查。
参见
:help :substitute
和:help pattern
。