Vim trim whitespace命令是否删除了百分比符号?

6l7fqoea  于 2023-10-20  发布在  其他
关注(0)|答案(2)|浏览(140)

我已经在工作中使用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()
hsvhsicv

hsvhsicv1#

它删除了百分比符号,因为它被告知这样做。正则表达式中的第二个百分比符号可能是不需要的。
通常“trimming”代表删除行尾的空格。如果是这样,那么应该有美元符号,

%s/\s\+$//e
pgky5nke

pgky5nke2#

substitute命令

%s/\s\+%//e

匹配空白\s,重复一次或多次\+,后跟文字百分比符号%,并将它们替换为空,即删除它们。
另一方面,下面的命令

%s/\s\+$//e

匹配空白\s,重复一次或多次\+,后跟一行结束$,并将它们替换为空。
我认为你的表达有一个错别字,你实际上在工作中使用了第二种形式。请仔细检查。
参见:help :substitute:help pattern

相关问题