Programing

단어를 인용 / 인용하는 데 어떤 Vim 명령을 사용할 수 있습니까?

crosscheck 2020. 5. 18. 22:01
반응형

단어를 인용 / 인용하는 데 어떤 Vim 명령을 사용할 수 있습니까?


내가 어떻게 빨리 인용 / 인용을 끝내 말과 변화 (예를 들어, 인용 '"빔에서)? Surround.vim 플러그인 에 대해 알고 있지만 Vim 만 사용하고 싶습니다.


Surround.vim이 가장 쉬운 해답이 될 것입니다. 실제로 사용하지 않으면 다음과 같이 할 수 있습니다. 반드시 가장 효율적인 것은 아니지만 서라운드 .vim이 작성된 이유입니다.

  • 작은 따옴표를 사용하여 단어를 인용하십시오.
    ciw'Ctrl+r"'
    • ciw -커서가있는 단어를 삭제하고 삽입 모드로 끝납니다.
    • ' -첫 번째 견적을 추가하십시오.
    • Ctrl+r"- "마지막 yank / delete로 알려진 레지스터 내용을 삽입하십시오 .
    • ' -닫는 따옴표를 추가하십시오.

  • 작은 따옴표로 묶인 단어를 인용 해제하십시오
    di'hPl2x
    • di' -작은 따옴표로 묶은 단어를 삭제하십시오.
    • hP -커서를 한 자리 (열기 따옴표 상단)로 이동하고 방금 삭제 한 텍스트를 따옴표 앞에 놓습니다.
    • l -커서를 한 자리 (오픈 시세 상단) 오른쪽으로 이동하십시오.
    • 2x -두 따옴표를 삭제하십시오.

  • 작은 따옴표를 큰 따옴표로 변경
    va':s/\%V'\%V/"/g
    • va' -인용 된 단어와 따옴표를 시각적으로 선택하십시오.
    • :s/ -교체를 시작하십시오.
    • \%V'\%V -시각적으로 선택된 영역 내에있는 작은 따옴표 만 일치시킵니다.
    • /"/g -큰 따옴표로 모두 바꾸십시오.

작은 따옴표를 사용하여 단어를 인용하십시오.

ciw'Ctrl+r"'

이런 식으로하는 것이 더 쉬웠습니다

ciw '' Esc P

다음은 도움이 될 수있는 몇 가지 매핑입니다.

:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P

mapleader 변수를 변경하지 않은 경우 \q" \q'또는 을 사용하여 매핑을 활성화하십시오 \qd. 커서 아래 단어 주위에 큰 따옴표를 추가하고 커서 아래 단어 주위에 작은 따옴표를 추가하고 커서 아래 단어 주위의 따옴표를 각각 삭제합니다.


다른 명령 외에도 모든 단어를 큰 따옴표로 묶습니다 (댓글에 따라)

:s/\(\S\+\)/"\1"/

또는 백 슬래시 수를 줄이려면 \v패턴의 시작 부분에 (매우 마술적인) 수정자를 넣을 수 있습니다

:s/\v(\S+)/"\1"/

작은 따옴표로 묶는 것은 (예를 들어) ciw'<C-r>"'<esc>작동하지만 반복 은 작동하지 않습니다. 시험:

ciw'<C-r><C-o>"'<esc>

기본 레지스터의 내용을 "문자 그대로"넣습니다. 이제 .아무 단어 나 눌러 따옴표로 묶을 수 있습니다. , 자세한 내용 :h[elp] i_ctrl-r에서 텍스트 개체에 대한 더:h text-objects

출처 : http://vimcasts.org/episodes/pasting-from-insert-mode/


매크로 방식

  1. Enter 키를 눌러 qqQ 레지스터에 기록 (우리는 "따옴표"를 기억하는 바로 가기로 "q"를 사용한다).

  2. 를 눌러 shift+의 b현재 단어의 앞쪽으로 이동 커서

  3. 프레스 i타입 '(작은 따옴표)

  4. esc누른 후 e눌러 단어 끝으로 이동

  5. 단어를 따옴표로 묶으려면을 누른 a다음을 '다시 누르 십시오.

  6. 마지막으로 누르면 레지스터 q에 기록됩니다 q.

사용 방법 :

  1. 커서를 원하는 단어로 이동하십시오.
  2. @q단어를 따옴표로 묶으려면 누릅니다 .
  3. @@다른 단어로 반복하려면을 누르십시오 .

step 4{줄, 문자를 찾을 때까지의 단어 등}과 같은 내용으로 변경할 수 있습니다 . 에 넣어 vim variables하고 .vimrc당신의 행복을 반복 할 수 있습니다.


I don't know any builtin vim command for this, but using r"f'r" to change from ' to " and r'f"r' to change from " to ' works if you stand on the first ' or ". The command r' replaces whatever character is under your cursor with ', and f" moves you forward to the next ".


For users of VSCodeVim you can do

vwS"

  • You can replace " with whatever you would like to wrap by.
  • You can replace w with any other selection operator

Adding Quotes

I started using this quick and dirty function in my .vimrc:

vnoremap q <esc>:call QuickWrap("'")<cr>
vnoremap Q <esc>:call QuickWrap('"')<cr>

function! QuickWrap(wrapper)
  let l:w = a:wrapper
  let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a')
  normal `>
  execute "normal " . inside_or_around . escape(w, '\')
  normal `<
  execute "normal i" . escape(w, '\')
  normal `<
endfunction

So now, I visually select whatever I want (typically via viw - visually select inside word) in quotes and press Q for double quotes, or press q for single quotes.

Removing Quotes

vnoremap s <esc>:call StripWrap()<cr>

function! StripWrap()
  normal `>x`<x
endfunction

I use vim-textobj-quotes so that vim treats quotes as a text objects. This means I can do vaq (visually select around quotes. This finds the nearest quotes and visually selects them. (This is optional, you can just do something like f"vww). Then I press s to strip the quotes from the selection.

Changing Quotes

KISS. I remove quotes then add quotes. For example, to replace single quotes with double quotes, I would perform the steps: 1. remove single quotes: vaqs, 2. add new quotes: vwQ.



Here are some simple mappings that can be used to quote and unquote a word:

" 'quote' a word
nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl
" double "quote" a word
nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl
" remove quotes from a word
nnoremap wq :silent! normal mpeld bhd `ph<CR>

I'm using nnoremap in my .vimrc

To single quote a word:

nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl

To remove quotes (works on double quotes as well):

nnoremap qs :silent! normal mpeld bhd `ph<CR>

Rule to remember: 'sq' = single quote.


VIM for vscode does it awsomely. It's based one vim-surround if you don't use vscode.

Some examples:

"test" with cursor inside quotes type cs"' to end up with 'test'

"test" with cursor inside quotes type ds" to end up with test

"test" with cursor inside quotes type cs"t and enter 123> to end up with <123>test

test with cursor on word test type ysaw) to end up with (test)


how about this?

 :%s/\'/"/g

I wrote a script that does this:

function! WrapSelect (front)
    "puts characters around the selected text.
    let l:front = a:front
    if (a:front == '[')
        let l:back = ']'
    elseif (a:front == '(')
        let l:back = ')'
    elseif (a:front == '{')
        let l:back = '}'
    elseif (a:front == '<')
        let l:back = '>'
    elseif (a:front =~ " ")
        let l:split = split(a:front)
        let l:back = l:split[1]
        let l:front = l:split[0]
    else
        let l:back = a:front
    endif
    "execute: concat all these strings. '.' means "concat without spaces"
    "norm means "run in normal mode and also be able to use \<C-x> characters"
    "gv means "get the previous visual selection back up"
    "c means "cut visual selection and go to insert mode"
    "\<C-R> means "insert the contents of a register. in this case, the
    "default register"
    execute 'norm! gvc' . l:front. "\<C-R>\""  . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>

To use, just highlight something, hit control l, and then type a character. If it's one of the characters the function knows about, it'll provide the correct terminating character. If it's not, it'll use the same character to insert on both sides.

Surround.vim can do more than just this, but this was sufficient for my needs.


Visual mode map example to add single quotes around a selected block of text:

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>

참고URL : https://stackoverflow.com/questions/2147875/what-vim-commands-can-be-used-to-quote-unquote-words

반응형