Backspace trong viết tắt chèn


8

Để làm việc, các chữ viết tắt cần được phân tách bằng khoảng trắng. Ví dụ, nếu tôi có iab fo FOOBARthì gõ whatfosẽ không kích hoạt chữ viết tắt. Có một số lý do rõ ràng hợp lý cho việc này.

Tuy nhiên, tôi muốn một từ viết tắt có thể được sử dụng như một hậu tố mà không cần tôi phải kích hoạt iab sau đó quay lại và xóa khoảng trắng. Điều này có thể không? Ví dụ iab fo <backspace>FOOBAR.


Có mã sau đây sản xuất những gì bạn muốn? vpaste.net/IfU1j
saginaw

@saginaw Vâng, tuyệt vời - hãy đăng bài đó như một câu trả lời và đó là của bạn.
goldilocks

Câu trả lời:


8

Bạn có thể viết bên trong vimrc của bạn: iab fo <BS>FOOBAR

<BS> là ký hiệu để sử dụng cho phím xóa lùi.

Để biết thêm thông tin về các tên khóa đặc biệt, xem:

:help key-notation

1
"Cách đơn giản hơn" đã không thành công trong trường hợp này bởi vì tôi nghĩ về sự mạnh mẽ; hậu tố thực tế là [7:0]và bạn sẽ phải chơi xung quanh với số bs, v.v. để tùy chỉnh cho điều đó, tôi nghĩ vậy.
goldilocks

@delicateLatticeworkFever Bạn nói đúng, tôi đã không nghĩ về điều đó. Trong trường hợp cụ thể này, có thể thay thế bebằng BEsẽ là đủ. Nhưng có thể có những trường hợp khác nó sẽ thất bại, tôi không biết. Trong mọi trường hợp, phiên bản đầu tiên, hy vọng, sẽ hoạt động hầu hết thời gian.
saginaw 6/2/2016

@delicateLatticeworkFever Đọc lại câu trả lời của tôi Tôi nhận ra rằng nó quá phức tạp. Có lẽ một cái gì đó như iab fo <BS>foobarlà đủ. Xin lỗi vì sự bất tiện này, có lẽ bạn nên đánh dấu vào câu trả lời của @djjcast là câu trả lời đúng. Hiện tại tôi không thể xóa câu trả lời của mình, nhưng một khi tôi có thể thì tôi sẽ làm. Một lần nữa thực sự xin lỗi, tôi không quen viết tắt.
saginaw

Hey <BS>chỉ là điều. Tôi thề đã thử một cái gì đó như thế, nhưng tôi không biết tất cả các nhân vật điều khiển, vì vậy tôi có thể đã sử dụng <backspace>hoặc một cái gì đó.
goldilocks

1
@delicateLatticeworkFever tôi hiểu, không vấn đề gì. Nếu bạn muốn xem tất cả các tên quan trọng đặc biệt, bạn có thể đọc chúng ở đây::help key-notation
saginaw

4

Đơn giản chỉ cần nhấn trong chế độ chèn Ctrl]. Điều này sẽ kích hoạt các chữ viết tắt được mở rộng, mà không cần nhập vào một khoảng trắng


Bạn đọc sai câu hỏi. Tôi muốn kết quả cuối cùng là một cái gì đó như: X(FOOBAR)không X( FOOBAR. Sử dụng Ctrl-] chỉ cần loại bỏ khoảng trống ở cuối . Tôi cần có khả năng sử dụng từ viết tắt - cũng phụ thuộc vào khoảng trắng khi bắt đầu kích hoạt - nhưng nó được ghép với từ trước đó (nghĩa là " hậu tố " nghĩa là gì).
goldilocks

Ồ, bạn muốn có một đoạn trích ...
Christian Brabandt 7/2/2016

Tôi đoán điều này có thể được thực hiện với một cái gì đó được xác định ${1}FOOBAR- đó là một câu trả lời tốt. Nếu bạn muốn thay đổi điều này: / hoặc thêm câu trả lời khác, tôi sẽ đánh dấu vào đó.
goldilocks

vì cá nhân tôi không biết plugin bổ trợ, tôi không thể nghiêm túc đưa ra câu trả lời này.
Christian Brabandt

4

Thay vào đó, đây là một cách để xác định và mở rộng các chữ viết tắt mở rộng ở bất cứ đâu:

let s:anywhere_abbreviations = {
    \ 'fo': 'FOOBAR',
    \ 'ab': 'ABBREVIATION',
\ }

function! s:MaybeExpandAbbreviation(trigger)
    for key in keys(s:anywhere_abbreviations)
        if matchstr(getline('.'), repeat('.', strchars(key)) . '\%' . col('.') . 'c') ==# key
            return repeat("\<BS>", strchars(key)) . s:anywhere_abbreviations[key] . a:trigger
        endif
    endfor
    return "\<C-]>" . a:trigger
endfunction

inoremap <expr> <Space> <SID>MaybeExpandAbbreviation("\<Space>")

Chỉ cần thêm các chữ viết tắt nên mở rộng bất cứ nơi nào vào s:anywhere_abbreviationstừ điển. Các s:MaybeExpandAbbreviation()tìm kiếm chức năng cho và mở rộng các trận đấu từ viết tắt khi chìa khóa kích hoạt được nhấn - <Space>là ánh xạ để kích hoạt việc mở rộng của "chữ viết tắt ở bất cứ đâu".

Với s:anywhere_abbreviationstừ điển trên , gõ whatfo<Space>sẽ mở rộng sang whatFOOBAR.


2

Để tóm tắt hai câu trả lời đơn giản nhất được đưa ra từ đây:

  1. Bạn có thể sử dụng một backspace trực tiếp bằng chữ viết tắt - nhiều ký tự đặc biệt khác nhau được ghi lại dưới đây :help keycodes. Vì vậy, ví dụ:

    :iab cdt <BS>cedental
    

    Sẽ cho phép bạn gõ trans cdtvà nhận transcendental.

  2. Một điều tôi đặc biệt xấu hổ vì tôi đã sử dụng nó trong nhiều năm: Plugin snipMate phổ biến cho phép các tham số đi trước, vì vậy

     snippet cdt
         ${1}cendental ${2}
    

    Cho phép nhập cdt, Tabsẽ mở rộng cendentalvà đặt con trỏ ở phía trước để bạn có thể nhập trans, sau đó nhấn Tablại để di chuyển đến đầu của từ tiếp theo.

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.