[vim] 숭고한 텍스트처럼 Vim 멀티 라인 편집?
gvim을 사용하기 시작했고 gvim에서 여러 줄 편집이 어떻게 작동하는지 이해할 수 없습니다.
예를 들면 다음과 같습니다.
원문 :
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
ctrl + q, jjjjjj, $ 모든 것이 선택되면 I 키를 눌러 여러 줄 삽입을 수행합니다.
내 의도는 첫 줄과 같이 따옴표를 삽입하고 Esc 키를 누르는 것입니다.
asd "asd asd" asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
asd asd asd asd asd;
어떻게 된 거예요? 나는 숭고한 텍스트와 비슷한 행동을 기대했습니다.
그것이 어떻게 작동하는지 모르는 경우 모든 라인에 대해 동작을 반복합니다. 어떻게 그렇게 할 수 있습니까? 그리고 vim은 여기서 무엇을하고 있습니까?
답변
Windows 호환성 계층을 삭제하여 호의를 베푸십시오.
Visual-Block 모드로 들어가는 일반적인 단축키는 <C-v>
입니다.
다른 사람들은 매크로 기록을 다루었습니다. 여기 몇 가지 다른 아이디어가 있습니다.
비주얼 블록 모드 만 사용 합니다.
-
두 번째 단어에 커서를 놓습니다.
asd |a|sd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd;
-
히트
<C-v>
입력 시각 블록 모드 및 아래쪽으로 선택을 확장 :asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd; asd [a]sd asd asd asd;
-
I"<Esc>
얻기 위해 명중 :asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd;
-
세 번째 단어의 마지막 문자에 커서를 놓습니다.
asd "asd as|d| asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd; asd "asd asd asd asd;
-
히트
<C-v>
입력 시각 블록 모드 및 아래쪽으로 선택을 확장 :asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd; asd "asd as[d] asd asd;
-
A"<Esc>
얻기 위해 명중 :asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd;
함께 시각적 블록 모드 Surround.vim .
-
두 번째 단어에 커서를 놓습니다.
asd |a|sd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd; asd asd asd asd asd;
-
히트
<C-v>
입력 시각 블록 모드 및 하단과 오른쪽으로 선택을 확장 :asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd; asd [asd asd] asd asd;
-
히트
S"
“를 선택을 둘러싸고 :asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd;
함께 시각적 라인 모드 :normal
.
-
V
전체 줄을 선택하고 아래쪽으로 확장하려면 누르십시오 .[asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;] [asd asd asd asd asd;]
-
다음 명령을 실행하십시오
:'<,'>norm ^wi"<C-v><Esc>eea"<CR>
.asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd; asd "asd asd" asd asd;
-
:norm[al]
라인 범위에서 일반 모드 명령 을 실행할 수 있습니다 ('<,'>
부분은 Vim에 의해 자동으로 추가되며 “선택된 영역에서 작동”을 의미합니다) -
^
줄의 첫 번째 문자에 커서를 놓습니다. -
w
다음 단어로 이동 -
i"
"
커서 앞에 a 를 삽입 -
<C-v><Esc>
이 컨텍스트에서 제어 문자를 입력하는 Vim의 방법입니다. 여기에서 삽입 모드<Esc>
를 종료하는 데 사용 됩니다 -
ee
다음 단어의 끝으로 이동 -
a"
"
커서 뒤에 a 를 추가합니다 -
<CR>
명령을 실행
Surround.vim을 사용하면 위의 명령은
:'<,'>norm ^wvees"<CR>
-
답변
그것들은 위에 주어진 좋은 즉시 사용 가능한 솔루션이지만 Sublime과 같은 여러 커서를 제공하는 플러그인을 사용해 볼 수도 있습니다.
나는 이것이 유망 해 보인다고 생각한다.
한동안 버린 것 같았지만 2014 년에 약간의 기여를했습니다.
흐름에 익숙해지기까지 약간의 시간이 걸렸지 만 상당히 강력합니다 (이것은 상당히 숭고한하지만 여전히 Vim과 같은 모달입니다).
내 경험상 다른 많은 플러그인이 설치되어 있으면 약간의 충돌이 발생할 수 있습니다!
이 기능에 대한 다른 시도가 있습니다.
- https://github.com/osyo-manga/vim-over (검색-바꾸기 만 가능하지만 실시간 미리보기 포함)
- https://github.com/paradigm/vim-multicursor
- https://github.com/felixr/vim-multiedit
- https://github.com/hlissner/vim-multiedit (이전 기준)
- https://github.com/adinapoli/vim-markmultiple
- https://github.com/AndrewRadev/multichange.vim
개선이 진행 중이라면 언제든지 수정하십시오.
답변
Vim에는 몇 가지 방법이 있습니다. Sublime Text와 가장 유사한 것이 무엇인지 모르겠습니다.
첫 번째는 다중 라인 삽입 모드 를 통하는 것 입니다. 첫 번째 줄에서 커서를 두 번째 “a”에 놓고을 Ctrl-V
누르고 모든 줄을 선택한 다음을 누르고 I
큰 따옴표를 넣습니다. 를 누르면 <esc>
모든 라인에서 작업이 반복됩니다.
두 번째는 매크로를 통한 것입니다. 커서를 첫 번째 문자에 놓고로 매크로 기록을 시작하십시오 qa
. 을 사용하여 오른쪽으로 이동 하고을 사용 llll
하여 삽입 모드로 들어가고 a
큰 따옴표를 입력하고 삽입 모드를
종료 한 다음 <home>
(또는 동등한 항목) 을 사용하여 행의 처음으로 돌아갑니다 . j
한 행 아래로 이동하려면 누릅니다 . 로 녹화를 중지하십시오 q
. 그런 다음로 매크로를 재생하십시오 @a
. 여러번.
위의 방법 중 어느 것이 당신에게 효과가 있습니까?
답변
“global”명령을 사용하면 한 줄에서 여러 줄로 온라인으로 수행 할 수있는 작업을 반복 할 수 있습니다.
:g/<search>/.<your ex command>
예:
:g/foo/.s/bar/baz/g
위의 명령은 foo가있는 모든 줄을 찾고 해당 줄의 모든 줄을 baz로 바꿉니다.
:g/.*/
모든 라인에서 할 것입니다
답변
Ctrl-v ................ start visual block selection
6j .................... go down 6 lines
I" .................... inserts " at the beginning
<Esc><Esc> ............ finishes start
2fdl. ................. second 'd' l (goes right) . (repeats insertion)
답변
나는 무엇 vim
을하고 있는지 잘 모르겠지만 흥미로운 효과입니다. 원하는 것을 설명하는 방식은 매크로가 작동하는 방식과 비슷합니다 ( :help macro
). 이와 같은 것은 매크로로 원하는 것을 할 것입니다 (정상 모드에서 시작).
qa
: 기록 할 매크로를a
기록합니다.0w
:0
줄의 시작으로,w
한 단어로 이동합니다.i"<Esc>
: 삽입 모드로 들어가서 a를 삽입하고"
일반 모드로 돌아갑니다.2e
: 두 번째 단어의 끝으로 이동합니다.a"<Esc>
다음을 추가합니다"
.jq
다음 줄로 이동하여 매크로 기록을 종료하십시오.
함께 찍은 : qa0wi"<Esc>2ea"<Esc>
이제로 매크로를 실행하고로 @a
마지막 매크로를 반복 할 수 있습니다 @@
. 파일의 나머지 부분에 적용하려면 99@a
99 줄을 초과하지 않는 것으로 가정하면 매크로 실행이 파일 끝에 도달하면 종료됩니다.
원하는 것을 달성하는 방법은 다음과 같습니다 visual-block-mode
(일반 모드에서 시작).
- 첫 번째 견적을 원하는 곳으로 이동하십시오.
- 를 입력
visual-block-mode
하고 영향을 줄 줄을 선택G
하여 파일의 맨 아래로 이동하십시오. - 을 누르십시오
I"<Esc>
. - 삽입하려는 다음 지점으로 이동하십시오
"
. - 당신은 당신이 방금 한 일을 반복하고 싶을
.
것입니다.
답변
내 해결책은 다음 두 가지 매핑을 사용하는 것입니다.
map <leader>n <Esc><Esc>0qq
map <leader>m q:'<,'>-1normal!@q<CR><Down>
그것들을 사용하는 방법 :
- 라인을 선택하십시오. 다음 12 줄을 선택하려면 그냥 누르십시오.
V12j
- 프레스
<leader>n
- 회선을 변경하십시오
- 정상 모드인지 확인한 다음
<leader>m
다시 편집하기 위해 다시 선택할 필요는 없습니다. 을 누르고 <leader>n
수정 한 다음을 눌러 <leader>m
적용하십시오.
작동 방식 :
-
<Esc><Esc>0qq
시각적 선택을 종료하고 줄의 시작 부분으로 이동하여 매크로 기록을 시작하십시오. -
q
매크로 기록을 중지하십시오. -
:'<,'>-1normal!@q<CR>
시각적 선택의 시작부터 끝 이전 줄까지 각 줄에서 매크로를 재생합니다. -
<Down>
마지막 줄로 돌아갑니다.
동일한 키를 다른 모드로 매핑 할 수도 있습니다.
vmap <leader>m <Esc><Esc>0qq
nmap <leader>m q:'<,'>-1normal!@q<CR><Down>
이로 인해 다른 편집 기능을 사용할 수 없게됩니다. 회선을 다시 선택해야합니다.