Làm thế nào để vào chế độ chèn khi vào khung thiết bị đầu cuối neovim?


16

Tôi có các ánh xạ sau để giúp dễ dàng di chuyển ra khỏi khung thiết bị đầu cuối trong neovim:

tnoremap <C-h> <C-\><C-n><C-w>h
" Workaround since <C-h> isn't working in neovim right now
tnoremap <C-w>h <C-\><C-n><C-w>h
tnoremap <C-j> <C-\><C-n><C-w>j
tnoremap <C-k> <C-\><C-n><C-w>k
tnoremap <C-l> <C-\><C-n><C-w>l

Vấn đề duy nhất là khi tôi quay trở lại khung thiết bị đầu cuối, tôi phải nhấn iđể quay lại chế độ chèn. Tôi luôn muốn nó ở chế độ chèn khi tôi di chuyển vào khung neovim đang chạy terminal. Cách tốt nhất để đạt được điều này là gì?

Câu trả lời:


18

Tên bộ đệm đầu cuối luôn bắt đầu bằng term://:

autocmd BufWinEnter,WinEnter term://* startinsert

Lưu ý rằng điều này sẽ luôn đưa bạn vào chế độ chèn khi bạn di chuyển đến cửa sổ đầu cuối, bất kể chế độ bạn đang sử dụng khi rời khỏi cửa sổ.


Bạn cũng có thể sử dụng chế độ tự động tương tự để luôn quay lại chế độ bình thường khi bạn rời khỏi cửa sổ đầu cuối, bất kể bạn rời khỏi cửa sổ này như thế nào:

autocmd BufLeave term://* stopinsert


Với giải pháp này, tôi gặp vấn đề này . Bạn có biết một cách xung quanh nó?
Rastapopoulos

Các BufEnterhình autocmd như nó không có vấn đề này.
Rastapopoulos

3

Nhập bộ đệm thiết buftypebị đầu cuối vào thiết bị đầu cuối, bạn thực sự có thể sử dụng bộ đệm này thay thế:

:au BufEnter * if &buftype == 'terminal' | :startinsert | endif

Tôi thấy rằng: startinsert không hoạt động cho thiết bị đầu cuối vim 8 gốc như bài này. Nó thực sự được tuyên bố rõ ràng trong :help terminalđó, ": startinsert là không hiệu quả." Tôi thấy rằng exec 'normal! i'hoạt động thay thế.
Kevin

1
"Tôi thấy rằng: startinsert không hoạt động cho các thiết bị đầu cuối vim 8 gốc như bài này." Điều đó thật đáng buồn. Vim có rất nhiều điều để học hỏi từ NeoVim.
trusktr

0

Hoặc thậm chí tốt hơn một chút:

  function! TerminalOptions()
    " /* folded code */
    silent au BufEnter <buffer> startinsert!
    silent au BufLeave <buffer> stopinsert!
  endfunction
  au TerminalOpen * call TerminalOptions()

<buffer>sẽ làm cho lệnh au được áp dụng cục bộ, vì vậy chỉ dành cho loại bộ đệm thuật ngữ. Điều này cũng hữu ích cho việc thay đổi, vì vậy chỉ thiết lập cho thiết bị đầu cuối. Chẳng hạn như swtich từ dòng tương đối đến tuyệt đối;)

Ngoài ra ..... tôi không thể :startinsertlàm việc, ngay cả khi tất cả các tài liệu chỉ ra điều đó. Tôi đã phải làm như sau:

    au BufEnter <buffer> exec "normal i"
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.