Tôi đã xác định ánh xạ toán tử lấy một vùng văn bản, sau đó yêu cầu một chuỗi đầu vào và sau đó căn chỉnh vùng đó với Tabular bằng cách sử dụng chuỗi đầu vào làm đối số. Nó hoạt động độc đáo.
Tôi đã triển khai nó như thế này, sử dụng vim-toán tử-user để giúp xác định toán tử mới:
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
Sau đó, tôi tự hỏi nếu tôi có thể làm cho nó cập nhật nhanh chóng trong khi nhập biểu thức thông thường để căn chỉnh với. Vấn đề với cách tiếp cận hiện tại là bạn phải hoàn tác và sau đó làm lại nếu bạn không sử dụng đúng biểu thức.
Đối với nỗ lực tương tác, tôi đã thực hiện điều này:
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
Nó sẽ hoạt động nhưng việc căn chỉnh không được thực hiện trước khi tôi nhấn enter, nghĩa là sau khi tôi nhập xong, nghĩa là nó hoạt động giống như chức năng không tương tác. Tôi tự hỏi nếu vấn đề có thể là một cái gì đó như màn hình / nội dung không được cập nhật trong khi thực hiện toán tử, chỉ sau đó.
Bất kỳ ý tưởng về những gì vấn đề có thể được đánh giá cao!