: читати після курсору, а не після рядка


11

Я :r !uuidgenчасто використовую для вставки нового uuid в буфер. Це працює, але я, як правило, намагаюся вставити uuid між цитатами і :r !uuidgenнадрукує uuid на новому рядку.

Щоб вирішити цю проблему, наразі використовую просту клавішу:

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

Цей макрос встановлює позначку mm, вставляє uuid r!uuidgen, видаляє вставлений uuid dW, видаляє додатковий рядок "_dd, повертається до позначки BACKTICKmта нарешті вставляє uuid p.

Чи існує спосіб :rодразу після курсору без цього макро / прив'язки клавіш, що марнує регістр?


1
Питання СУ , також із таким способом вирішення.
муру

Відповіді:


8

Ви можете використовувати регістр виразів "=і system():

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

Це виглядатиме так у картографічному режимі:

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

або, з відображенням виразу:

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

5

У режимі вставки можна натиснути Ctrl-Rта ввести:

=system('uuidgen')

Зауважте, що це додасть зворотний новий рядок, тому що саме це дає uuidgenрезультат; щоб виправити це, ми могли використовувати:

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

Щоб видалити новий рядок

Від :help i_CTRL-R:

Вставте вміст регістра. Між введенням CTRL-R та другим символом на дисплеї відобразиться "" ", що вказує на те, що ви повинні ввести ім'я регістра.

[..]

'=' регістр виразів: вам буде запропоновано ввести вираз (див. вираз)

Щоб прив’язати це до Ctrl-uприкладу, ви можете використовувати:

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

2

Ще один із :python:

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

Можна вказати як:

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

UUID генеруються модулем Python UUID .


1
Це, однак, досить кручений спосіб.
муру

0

Це, мабуть, менш бажано, ніж використання рішення з чистою версією, однак, якщо ви використовуєте диспетчер фрагментів, такий як Ultisnips, ви можете спробувати додати фрагмент, такий як:

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

Таким чином ви можете ввести uuidта натиснути на тригер розширення у режимі вставки та uuidбуде замінено на висновок відповідної команди оболонки. Звичайно, це можна легко адаптувати для інших команд і розширити потужними способами, як описано в документах Ultisnips.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.