Vim - 시각적 블록 모드에 삽입하는 동안 즉각적인 시각적 피드백을 받을 수 있는 방법이 있습니까?

Vim - 시각적 블록 모드에 삽입하는 동안 즉각적인 시각적 피드백을 받을 수 있는 방법이 있습니까?

나는 종종 다음을 누른다:

  • <Ctrl> V시각적 차단 모드로 들어가서 열 강조 표시
  • (행의 시작 부분에 삽입)을 클릭 <shift>-i하고 내용을 입력합니다(이 시점에서 첫 번째 행에는 변경 사항이 표시되지만 다른 행에는 변경 사항이 표시되지 않습니다).
  • 그런 다음 클릭하여 <Esc>일반 모드로 돌아갑니다.

을 클릭하면 <Esc>삽입한 내용이 다른 행마다 배치되는 것을 볼 수 있습니다.

내가 원하는 것은 첫 번째 행뿐만 아니라 입력할 때 각 행의 변경 사항을 시각적으로 확인하는 것입니다. 그게 가능합니까?

Visual Block으로 이동하여 여러 행을 선택하십시오. 여기에 이미지 설명을 입력하세요.

이기다<Shift> i 여기에 이미지 설명을 입력하세요.

텍스트를 추가하세요- 바꾸고 싶은 부분이다. 첫 번째 줄뿐만 아니라 모든 줄에서 공백이 즉시 표시되기를 원합니다. 여기에 이미지 설명을 입력하세요.

치고 탈출- 이제 각 줄에 공백이 추가됩니다. 이런 일이 더 빨리 일어나길 바랍니다. 여기에 이미지 설명을 입력하세요.

나는 이 예에서 하고 있는 일을 달성하기 위해 그것을 사용할 수 있다는 것을 알고 있습니다 >>.나는 내가 바꾸고 싶은 것을 설명하기 위해 간단한 예를 선택했습니다.

감사해요!

답변1

이것을 당신의vimrc:

nmap <buffer> <silent> <expr> <F12> InsertCol()
imap <buffer> <silent> <expr> <F12> InsertCol()

function! InsertCol()
    let w:first_call = exists('w:first_call') ? 0 : 1
    "if w:first_call
    "    startinsert
    "endif
    try
        let char = getchar()
    catch /^Vim:Interrupt$/
        let char = "\<Esc>"
    endtry
    if char == '^\d\+$' || type(char) == 0
        let char = nr2char(char)
    endif " It is the ascii code.
    if char == "\<Esc>"
        unlet w:first_call
        return char
    endif
    redraw
    if w:first_call
        return char."\<Esc>gvA\<C-R>=Redraw()\<CR>\<F12>"
    else
        return char."\<Esc>gvlA\<C-R>=Redraw()\<CR>\<F12>"
    endif
endfunction

function! Redraw()
    redraw
    return ''
endfunction

그런 다음 Ctrl-vI평소처럼 을 누른 다음 를 누릅니다 F12. 각 키 입력으로 변경된 모든 행을 삽입하고 표시합니다.

F12I참고: 매번 누르는 것보다 눌러서 삽입 모드로 들어가면 스크립트가 더 좋을 것입니다 . 어쩌면 startinsert명령의 조합으로 vnoremap이를 수행할 수도 있습니다.

관련 정보