Bir metin bölgesi alır, sonra bir giriş dizesi sorar ve sonra argüman olarak giriş dizesini kullanarak bölgeyi Tabular ile hizalar bir operatör eşleme tanımladım . Güzel çalışıyor.
Yeni bir operatörün tanımlanmasına yardımcı olmak için vim-operator-user kullanarak bu şekilde uyguladım :
map \aa <Plug>(operator-align)
call operator#user#define('align', 'Align')
function! Align(motion_wiseness)
let expr = input("align: ")
if len(expr) != 0
execute "'[,']Tabularize /".expr
endif
endfunction
function! Getchar()
let c = getchar()
if c =~ '^\d\+$'
let c = nr2char(c)
endif
return c
endfunction
Sonra hizalamak için normal ifadeye girerken anında güncelleme yapabilir miyim diye merak ettim. Geçerli yaklaşımla ilgili sorun, doğru ifadeyi kullanmıyorsanız geri almanız ve sonra yeniden yapmanız gerektiğidir.
Etkileşimli girişim için şunu yaptım:
map \== <Plug>(operator-align-interactive)
call operator#user#define('align-interactive', 'AlignInteractive')
function! AlignInteractive(motion_wiseness)
let prompt = "Align: "
echon prompt
let expr = ""
let c = Getchar()
" CR has to be checked for separately as it acts as putting the cursor back to zero position
while c != "\<Esc>" && c != "\<CR>"
if c == "\<BS>"
if len(expr) != 0
let expr = expr[0:-2]
echon "\<CR>".substitute(expr, ".", " ", "g")
echon "\<CR>".prompt.expr
endif
else
let expr .= c
echon c
let cmd = "'[,']Tabularize /".expr
execute cmd
endif
let c = Getchar()
endwhile
endfunction
O gerektiğini çalışmak ama girmek vurmadan önce hizalama ben etkili olarak etkileşimli olmayan işleviyle aynı şekilde çalışır, yani bitmiş girme girişi var peşinde olduğu, yapılmaz. Sorunun, yalnızca bir operatör yürütmesi sırasında ekranın / içeriğin güncellenmemesi gibi bir şey olup olmadığını merak ediyorum.
Sorunun ne olabileceği hakkında herhangi bir fikir takdir edilmektedir!