Chỉnh sửa : Tôi vừa phát hiện ra plugin vim-textobject-latex , bổ sung chức năng chính xác mà bạn đang tìm kiếm (ngoài một vài thứ khác). Từ README của plugin:
Các đối tượng văn bản hiện được hỗ trợ là:
a i Description
a\\ i\\ Inline math surrounded by ``\\(`` and ``\\)``.
a$ i$ Inline math surrounded by dollar signs.
aq iq Single-quoted text ``\`like this'``.
aQ iQ Double-quoted text ``\``like this''``.
ae ie Environment ``\begin{...}–\end{...}``
Vì vậy, bạn có thể sử dụng caq
và như bạn muốn. Tôi đã thử nghiệm nó và nó hoạt động như quảng cáo, nhưng lưu ý rằng nó phụ thuộc vào plugin vim-textobject-user . Cũng lưu ý rằng bạn phải đảm bảo rằng textobject-user
plugin tải trước , nếu không mọi thứ sẽ không hoạt động.
Tuy nhiên, nếu bạn không muốn gây rối với các plugin, câu trả lời ban đầu của tôi vẫn hữu ích:
Thêm hai dòng này vào .vimrc
sẽ bao gồm hầu hết những gì bạn muốn.
onoremap aq :<c-u>normal! F`vf'<cr>
onoremap iq :<c-u>normal! T`vt'<cr>
Chúng tạo các đối tượng văn bản mới ( aq
và iq
) quay trở lại trước đó `
, vào chế độ lựa chọn trực quan, sau đó chọn tiếp theo '
.
Điều này sẽ làm việc cho ciq
, caq
, yiq
, và diq
. Tuy nhiên, yaq
và daq
sẽ không yank / xóa các trích dẫn bên ngoài, vì vậy tôi đã tạo một đối tượng văn bản khác a"
, để xử lý điều đó ( i"
không cần thiết, nhưng tôi đã thêm để giữ mọi thứ nhất quán:
onoremap a" :<c-u>normal! 2F`v2f'<cr>
onoremap i" :<c-u>normal! 2T`v2t'<cr>
Nhược điểm chính ở đây là điều này sẽ phá vỡ bình thường ca"
, vv sử dụng. Nếu bạn mở đầu chúng au FileType tex
, bạn sẽ chỉ gặp vấn đề đó trong .tex
các tệp, nhưng đôi khi nó vẫn có thể gây phiền toái. Bạn cũng có thể đặt tên cho đối tượng giống như ad
/ id
('d' cho 'double' quote), nhưng điều đó có vẻ ít trực quan hơn đối với tôi (tôi đang hướng đến sự khác biệt ít nhất so với hoạt động bình thường).
Cách duy nhất tôi có thể nghĩ đến để bọc chúng thành hai đối tượng văn bản là viết một hàm kiểm tra một trích dẫn khác bên ngoài tập đầu tiên và đặt các aq
đối tượng văn bản để gọi nó.
Lưu ý : Có một vài vấn đề nhỏ khác với:
- Yanking có thể để con trỏ của bạn ở một nơi không mong muốn (điều này có thể được khắc phục bằng cách thêm bằng cách sử dụng một dấu trong các lệnh (ví dụ
ma2F`v2f'<cr>`a
), chỉ cần đảm bảo không sử dụng một con trỏ bạn thường sử dụng thủ công)
- Con trỏ phải nằm trong dấu ngoặc kép; những điều kỳ lạ xảy ra nếu nó là trên dấu ngoặc kép.
Để kết thúc tất cả những điều đó, đây là những gì cá nhân tôi sẽ thêm vào .vimrc
vấn đề này:
augroup filetype_latex
au!
au FileType tex,plaintex onoremap a' :<c-u>normal! muF`vf'<cr>`u
au FileType tex,plaintex onoremap i' :<c-u>normal! muT`vt'<cr>`u
au FileType tex,plaintex onoremap a" :<c-u>normal! mu2F`v2f'<cr>`u
au FileType tex,plaintex onoremap i" :<c-u>normal! mu2T`v2t'<cr>`u
end augroup
Như bạn có thể thấy, tôi đã chọn phá vỡ chức năng bình thường ca'
/ ya"
/ etc vì vậy tôi sẽ không phải học các lệnh mới cho chúng vì tôi sẽ không sử dụng chức năng bình thường nhiều như vậy trong LaTeX. Đó chỉ là một sở thích cá nhân; không khó để chuyển đổi tên đối tượng. Tôi cũng đã thêm vào phát hiện filetype và đánh dấu.
iq
, nhưng dường như không hoạt động với, ví dụ ,daq
.