Vùng hình chữ nhật làm đối tượng văn bản?


11

Có thể định nghĩa một đối tượng văn bản trong vim sẽ hoạt động trên một vùng hình chữ nhật không?

Chẳng hạn, giả sử tôi có các cột văn bản được căn chỉnh theo chiều dọc, như thế này:

column 1 co    column 2 col
lumn 1 colu    umn 2 column
mn 1 column    2 column 2 c
1 column 1     olumn 2 colu

Có thể định nghĩa một textobject ccho các cột, như vậy dacsẽ xóa một cột, yacsẽ đánh dấu nó, cacsẽ thay đổi nó, v.v.

(Tôi biết về Control-V để chọn một khu vực hình chữ nhật, và tôi biết thì bạn có thể sử dụng d, y, vv để xóa, yank vv vùng được chọn. Nhưng tôi đặc biệt tò mò về những gì có thể sử dụng đối tượng văn bản.)


6
Có thể không? Chắc chắn rồi! Trường hợp và điểm: textobj-word-cột.vim
Peter Rincker

@PeterRincker Điều này thật tuyệt, nhưng tôi tự hỏi liệu nó có thể được đơn giản hóa để tận dụng lợi thế của người dùng textobj của Kana không .
lcd047

Cảm ơn, Peter, đó chính xác là ví dụ mà tôi đang tìm kiếm.
Leah Velleman

2
@PeterRincker làm cho câu trả lời này :)
Vitor

Câu trả lời:


5

Vâng, điều này là có thể. @PeterRincker thấy plugin textobj-word-cột , trong đó xác định bốn đối tượng văn bản ( ic, ac, iC, và aC) cho các cột word-based.

Ý tưởng đằng sau chức năng này là tạo ra một chức năng xác định chuyển động dựa trên cột và sau đó ánh xạ chức năng này một cách thích hợp vào ánh xạ chế độ trực quan / chọn và ánh xạ chờ toán tử. Để sử dụng plugin được đề cập ở trên làm ví dụ, nó tạo ra các ánh xạ sau:

xnoremap <silent> ac :<C-u>call TextObjWordBasedColumn("aw")<cr>
xnoremap <silent> aC :<C-u>call TextObjWordBasedColumn("aW")<cr>
xnoremap <silent> ic :<C-u>call TextObjWordBasedColumn("iw")<cr>
xnoremap <silent> iC :<C-u>call TextObjWordBasedColumn("iW")<cr>
onoremap <silent> ac :call TextObjWordBasedColumn("aw")<cr>
onoremap <silent> aC :call TextObjWordBasedColumn("aW")<cr>
onoremap <silent> ic :call TextObjWordBasedColumn("iw")<cr>
onoremap <silent> iC :call TextObjWordBasedColumn("iW")<cr>

Ở đây TextObjWordBasedColumn(...)xác định chuyển động của cột và được ánh xạ sang cả chế độ trực quan / chọn với xnoremapvà chế độ chờ toán tử với onoremap. Lưu ý rằng chức năng này hơi phức tạp để xử lý sự thay đổi và tìm ranh giới chuyển động phù hợp.


4

Có thể không? Chắc chắn rồi! Trường hợp và điểm: textobj-word-cột.vim .

Cách tạo các đối tượng văn bản của riêng bạn

Thông thường chế độ trực quan được sử dụng để tạo một đối tượng văn bản mới. Chế độ trực quan có thể là dòng thông minh, thông minh nhân vật (thông thường) hoặc khối hình ảnh. Dưới đây là những điều cơ bản về những gì bạn sẽ cần:

  • Một tổ hợp khóa không được sử dụng điển hình a{char}hoặc i{char}{char}cả hai mô tả và không được sử dụng. ví dụ i/như một đối tượng văn bản mẫu giữa /'s.
  • Cần một cách để tìm sự bắt đầu của đối tượng văn bản của bạn. ví dụT/
  • Cần một cách để tìm sự kết thúc của đối tượng văn bản của bạn. ví dụt/
  • Chọn một chế độ trực quan. ví dụv
  • Tạo một chế độ trực quan (chỉ) ánh xạ qua xnoremap.
  • Tạo một toán tử ánh xạ chế độ chờ xử lý sử dụng ánh xạ chế độ trực quan thông qua onoremap:normal.

Bây giờ là một ví dụ về đơn giản của chúng ta i/tạo ra một đối tượng văn bản giữa /các:

xnoremap i/ :<c-u>normal! T/vt/<cr>
onoremap i/ :normal vi/<cr>

Miễn là bạn làm theo các thành phần cơ bản, bạn có thể tạo các đối tượng văn bản cho tất cả các loại.

Tạo đối tượng văn bản nâng cao với vim-textobj-user

Các vim-textobj người dùng plugin cung cấp một cách phổ biến để xác định tùy chỉnh văn bản các đối tượng trong một thời trang khai báo nhiều hơn nữa. Ví dụ ở đây là một đối tượng văn bản thẻ php:

call textobj#user#plugin('php', {
\   'code': {
\     'pattern': ['<?php\>', '?>'],
\     'select-a': 'aP',
\     'select-i': 'iP',
\   },
\ })

Để được trợ giúp thêm với vim-textobj-user, hãy xem tài liệu trợ giúp của nó : :h textobj-user-introduction.

Để được trợ giúp thêm

:h map-overview
:h visual-start
:h :norm

Cũng như Tạo các đối tượng văn bản mới Trang wiki Vim.

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.