Skip to content

Sử dụng ibus bamboo với Vim.

Hùng edited this page Mar 14, 2020 · 4 revisions

Các bạn dùng Vim mà bật bộ gõ tiếng Việt chắc cũng sẽ gặp những hành vi không mong muốn như dd không xóa dòng mà gửi thẳng chữ đ vào buffer. Thực chất khi sử dụng Vim, các bạn chỉ mong muốn gõ tiếng Việt trong insert mode, nhưng nếu tắt IBus đi thì lại không gõ được tiếng Việt. Chúng ta sẽ giải quyết vấn đề này như sau:

  • Bật bộ gõ khi vào insert mode.
  • Tắt bộ gõ khi thoát insert mode.
  • Bật bộ gõ khi tìm kiếm, tắt bộ gõ khi tìm kiếm xong
function! IBusOff()
  " Lưu engine hiện tại
  let g:ibus_prev_engine = system('ibus engine')
  " Chuyển sang engine tiếng Anh
  execute 'silent !ibus engine xkb:us::eng'
endfunction
function! IBusOn()
  let l:current_engine = system('ibus engine')
  " nếu engine được set trong normal mode thì
  " lúc vào insert mode duùn luôn engine đó
  if l:current_engine !~? 'xkb:us::eng'
    let g:ibus_prev_engine = l:current_engine
  endif
  " Khôi phục lại engine
  execute 'silent !' . 'ibus engine ' . g:ibus_prev_engine
endfunction
augroup IBusHandler
    autocmd CmdLineEnter [/?] call IBusOn()
    autocmd CmdLineLeave [/?] call IBusOff()
    autocmd InsertEnter * call IBusOn()
    autocmd InsertLeave * call IBusOff()
augroup END
call IBusOff()

Lưu ý:

  1. Đoạn mã này không giúp bạn tự chuyển về engine tiếng Anh khi bạn focus sang một cửa sổ khác, bật bộ gõ lên rồi quay trở lại vim
  2. Nếu bạn không muốn tình huống như lưu ý (1), bạn có thể tắt tính năng chia sẻ engine giữa mọi cửa số trong phần cài đặt ibus. Tuy nhiên trong quá trình sử dụng mình thấy việc mỗi cửa sổ có một engine riêng hơi lag và sập. (xem thêm)