: đọc sau con trỏ thay vì sau dòng


11

Tôi sử dụng :r !uuidgenthường xuyên để chèn một uuid mới vào bộ đệm. Điều này hoạt động, nhưng tôi thường cố gắng chèn uuid giữa các trích dẫn và :r !uuidgenin uuid trên một dòng mới.

Để giải quyết vấn đề này, tôi hiện đang sử dụng một sơ đồ đơn giản:

nnoremap <C-u> mm:r!uuidgen<CR>dW"_dd`mp

Macro này đặt dấu mm, chèn uuid r!uuidgen, xóa uuid đã chèn dW, xóa dòng thừa "_dd, quay lại dấu BACKTICKmvà cuối cùng dán uuid p.

Có cách nào để :rngay sau con trỏ mà không có macro / keybinding này gây lãng phí một thanh ghi không?


1
Câu hỏi SU , cũng với cách giải quyết như thế này.
muru

Câu trả lời:


8

Bạn có thể sử dụng thanh ghi biểu thức "=system():

<C-r>=system("uuidgen | tr -d '\n'")<CR>

Nó trông giống như trong ánh xạ chế độ chèn:

inoremap <key> <C-r>=system("uuidgen | tr -d '\n'")<CR>

hoặc, với ánh xạ biểu thức:

inoremap <expr> <key> system("uuidgen \| tr -d '\n'")

5

Từ chế độ chèn, bạn có thể nhấn Ctrl-Rvà sau đó nhập:

=system('uuidgen')

Lưu ý rằng điều này sẽ thêm một dòng mới, bởi vì đó là những gì uuidgenđầu ra; Để khắc phục điều này, chúng tôi có thể sử dụng:

=system('uuidgen')[:-2]

Để xóa dòng mới.

Từ :help i_CTRL-R:

Chèn nội dung của một thanh ghi. Giữa việc nhập CTRL-R và ký tự thứ hai, '"' sẽ được hiển thị để cho biết rằng bạn sẽ nhập tên của một thanh ghi.

[..]

'=' thanh ghi biểu thức: bạn được nhắc nhập một biểu thức (xem biểu thức)

Để liên kết điều này với Ctrl-uví dụ của bạn, bạn có thể sử dụng:

nnoremap <C-u> i<C-r>=system('uuidgen')[:-2]<CR><Esc>

2

Một cái nữa, với :python:

:py import uuid, vim; vim.command(':normal i' + str(uuid.uuid1()))

Bạn có thể ánh xạ như:

:inoremap <key> <esc>:py import uuid, vim; vim.command(':normal a' + str(uuid.uuid1()))<cr>a

Các UUID được tạo bởi mô-đun UUID của Python .


1
Đây là một cách khá xoắn để đi về, mặc dù.
muru 16/2/2015

0

Điều này có lẽ ít được ưa thích hơn so với sử dụng giải pháp thuần túy vim, tuy nhiên, nếu bạn sử dụng trình quản lý đoạn mã như Ultisnips thì bạn có thể thử thêm một đoạn mã như sau:

snippet uuid "insert new uuid" w
`uuidgen`
endsnippet

Bằng cách này, bạn có thể nhập uuidvà nhấn trình kích hoạt mở rộng của mình ở chế độ chèn và uuidsẽ được thay thế bằng đầu ra của lệnh shell có liên quan. Điều này, tất nhiên, có thể dễ dàng điều chỉnh cho các lệnh khác và được mở rộng theo những cách mạnh mẽ như được nêu trong các tài liệu Ultisnips.

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.