正则表达式在vim配置文件中不工作

正则表达式在vim配置文件中不工作,vim,Vim,我的一个ftplugin文件中有以下正则表达式,其目的是在按下enter键后用空格分隔赋值运算符: inoremap <CR> <Esc>:s/\s*\([=+!-]\?=\)\s*/ \1 /ge<CR>:noh<CR>o inoremap:s/\s*\([=+!-]\?=\)\s*/\1/ge:noho 它在=、=、!=、+=、-=。到目前为止,这一部分似乎工作得完美无缺。当我按如下方式修改此正则表达式以分隔比较运算符时,会出现问题: in

我的一个ftplugin文件中有以下正则表达式,其目的是在按下enter键后用空格分隔赋值运算符:

inoremap <CR> <Esc>:s/\s*\([=+!-]\?=\)\s*/ \1 /ge<CR>:noh<CR>o
inoremap:s/\s*\([=+!-]\?=\)\s*/\1/ge:noho
它在=、=、!=、+=、-=。到目前为止,这一部分似乎工作得完美无缺。当我按如下方式修改此正则表达式以分隔比较运算符时,会出现问题:

inoremap <CR> <Esc>:s/\s*\([=+!-]\?=\|[><]=\?\)\s*/ \1 /ge<CR>:noh<CR>o

inoremap:s/\s*\([=+!-]\?=\\\\\\\\\\;[>尝试指定正则表达式中的
magic

inoremap <CR> <CR>a<Esc>mz:-1s/\v\s*([=+!-<>]?\=\|[<>])\s*/ \1 /ge<CR>:nohls<CR>`zcl
inoremap-amz:-1s/\v\s*([=+!-]?\=\\\\\\\;[])\s*/\1/ge:nohls`zcl
另外请注意,我使用C-o从插入模式发出替换

崩溃

  • a
    正常执行回车,插入一个伪字符(
    'a'
  • 离开插入模式
  • mz
    在寄存器中保存光标位置
    z
  • :-1s/\v../…/g
    在前一行(
    -1
    )上执行全局替换,并启用
    非常神奇
  • :nohls
    隐藏搜索突出显示
  • `z
    恢复保存的光标位置
  • cl
    进入插入模式,覆盖前面的虚拟字符

发布了我的光标还原版本。你会发现我的版本在中间分割线时很好用。保留缩进很好,我没有意识到我的版本在用换行符拆分现有行时会中断。我在你的版本中仍然看到的一个问题是,寄存器似乎只在拆分行时起作用,而不是在换行符时起作用,但我似乎不明白为什么。我唯一能想到的是,因为我使用了缩进脚本()而不是常规的smartindentlet
inoremap <CR> <CR>a<Esc>mz:-1s/\v\s*([=+!-<>]?\=\|[<>])\s*/ \1 /ge<CR>:nohls<CR>`zcl