Я пытаюсь добавить следующую аббревиатуру в vim, но она не работает.
noreabbrev <space><space> .<space>
Такая же клавиатура, как и в большинстве современных телефонов.
так может кто-нибудь сказать мне, что я делаю не так и как заставить это работать?
решение1
Существует три типа сокращений: full-id, end-id, non-id, каждое из которых имеет определенные условия для наборов разрешенных символов. См. :help abbreviations
. Два пробела не допускаются ни в одном из них.
Вам придется использовать :inoremap
(и смириться с неизбежной задержкой, с которой первый символ пробела появится в буфере), или построить комплекс :inoremap <expr> <Space>
, который проверяет предыдущий символ и только потом творит свое волшебство.
решение2
Я быстро это соорудил. Поместите его в файл с именем InsertSpace.vim
или как-то так и либо возьмите его из vimrc, либо поместите его в ~/.vim/plugin/
( ~\vimfiles\plugin
в Windows):
function! s:InsertSpace()
if getline('.')[col('.')-3:col('.')-2] =~ '[^. ]\s$'
return "\<bs>. "
else
return ' '
endif
endfunction
inoremap <expr> <space> <SID>InsertSpace()
Это не будет идеально, но это можно улучшить.