Vim - Gõ tiếng Việt

20250704 #vim #tech

Mình viết blog này hoàn toàn bằng Vim, vì thế gõ tiếng Việt một cách mượt mà trong Vim là điều không thể thiếu.

Một trong vô vàn tính năng mà Vim mang đến là autocmd. Chạy lệnh một cách tự động khi những sự kiện xảy ra.

Như đã đề cập ở bài viết Gõ tiếng Việt trên Linux. Mình dùng lệnh inp để bật tắt chế độ gõ tiếng Việt. Để tiếp tục, bạn hãy tìm hiểu về lệnh inp tại repo dotfiles của mình.

Quay trở lại với Vim, mình sẽ chạy lệnh inp trong 5 sự kiện chính:

Mục đích của mình là bật gõ tiếng Việt khi đang trong Insert Mode và tắt telex khi trong Normal Mode.

Nhưng không phải lúc nào mình cũng muốn gõ telex trong Insert Mode, chẳng hạn như khi viết code hoặc viết tiếng Anh. Do đó mình sẽ không bật những lệnh tự động này mọi lúc mọi nơi.

Trong vimrc, hãy thêm hàm sau, mình sẽ gọi là ToggleTelex:

function! ToggleTelex()
  if !exists("g:telex_enabled") || g:telex_enabled == 0
    let g:telex_enabled = 1
    augroup Telex
      autocmd!
      autocmd InsertEnter * silent! !inp vi &>/dev/null &
      autocmd InsertLeave,CmdLineLeave,VimLeavePre,VimEnter * silent! !inp en &>/dev/null &
      augroup END
  else
    let g:telex_enabled = 0
    augroup Telex
      autocmd!
    augroup END
  endif
endfunction

Mình sẽ không giải thích dài dòng vì nhìn thì thấy rối nhưng mà khá là đơn giản nếu bạn hiểu vim script.

Mặc định để bật tính năng này, bạn phải dùng lệnh:

call ToggleTelex()

Để thuận tiện hơn, mình sẽ gán nó vào phím tắt Leaderv. Và để thuận tiện hơn nữa, mình sẽ bật nó khi đang soạn thảo các file có định dạng markdown hoặc asciidoc. Để làm điều này, hãy thêm hai dòng sau vào vimrc của bạn:

nnoremap <leader>v :call ToggleTelex()<CR>
autocmd FileType markdown,asciidoc :call ToggleTelex()

Cách hoạt động


Bài viết liên quan