: 줄 뒤가 아닌 커서 뒤를 읽습니다.


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
SU question , 이와 같은 해결 방법도 있습니다.
muru

답변:


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
그러나 이것은 다소 왜곡 된 방법입니다.
muru

0

이것은 순수 Vim 솔루션을 사용하는 것보다 바람직하지 않지만 Ultisnips 와 같은 스 니펫 관리자를 사용하는 경우 다음과 같은 스 니펫을 추가 할 수 있습니다 .

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

이 방법으로 uuid삽입 모드에서 확장 트리거를 입력 하고 맞출 수 uuid있으며 관련 쉘 명령의 출력으로 대체됩니다. 물론 이것은 다른 명령에 쉽게 적용 할 수 있으며 Ultisnips 문서에 요약 된 것처럼 강력한 방식으로 확장 될 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.