vim에서, 나는 종종 큰 텍스트 블록을 삭제하거나, k거나 입력해야합니다.
텍스트 줄 수를 세고 50dd
50 줄을 삭제하는 것과 같은 것을 입력 할 수 있습니다 .
그러나 그것은 약간의 고통입니다. 어떻게 텍스트의 큰 블록을 삭제할 수 없이 사전에 삭제하는 방법을 많은 줄 알 필요가?
vim에서, 나는 종종 큰 텍스트 블록을 삭제하거나, k거나 입력해야합니다.
텍스트 줄 수를 세고 50dd
50 줄을 삭제하는 것과 같은 것을 입력 할 수 있습니다 .
그러나 그것은 약간의 고통입니다. 어떻게 텍스트의 큰 블록을 삭제할 수 없이 사전에 삭제하는 방법을 많은 줄 알 필요가?
답변:
블록의 시작 줄로 이동하여 입력하십시오 ma( "a"로 표시하십시오. 물론 다른 문자를 사용할 수 있지만 다른 문자에 대해 여러 문자를 사용 하더라도 각 문자의 표시를 머리에 똑바로 유지할 수 있습니다) .
그런 다음 마지막 줄로 이동하여 d'a( "a"를 표시하려면 삭제) 또는 y'a( "a"를 표시하려면 삭제 ) (a)를 입력하십시오 .
현재 행에서 표시된 행까지의 모든 행을 삭제 / 생성합니다 (포함).
그런 다음 p또는 과 같은 일반적인 붙여 넣기 명령을 사용하여 다른 곳에 붙여 넣을 수 있습니다 P.
또한 환경이 후자에게 축복받지 않을 가능성이 vi
있을 때 와 호환됩니다 vim
.
(a) 또한 호출하려는 함수의 정의를 복사하여 붙여 넣는 등의 다른 곳을 찾아야하는 경우이를 사용하여 파일에 내 장소를 저장합니다.
현재 줄을 같은 방식으로 표시 ma한 다음 원하는 것을 찾기 위해 방황합니다.
그런 다음, 그것을 찾아서 레지스터에 복사 한 후에는 'a미리 저장된 줄 "a"를 표시하기 위해 다시 들어가서 붙여 넣을 수 있습니다.
v
실제로 필요하거나 더 나은 모션 방식이 있습니까?
Vim에서 비주얼 라인 모드를 사용 하십시오 .
큰 텍스트 블록을 삭제하는 경우 커서가있는 열에 대해 걱정할 필요가 없으므로 단순 시각적 모드보다 선호됩니다.
}
전체 단락 또는 )
문장 을 선택 하는 데 사용할 수 있습니다 . 더 많은 :h object-motions
/something<CR>
j
커서를 아래로 이동 하지 않아도 (3 단계) 행 번호를 입력 한 다음 G
해당 행까지 선택할 수 있습니다. 예 :V150Gd
당신은 할 수 :set relativenumber
있으므로 계산할 필요가 없습니다. ;)
:set number
을 누른 다음 d35G를 사용하여 35 번째 줄까지 삭제합니다.
relativenumber
하지만 더 좋습니다 :-)
구조를 알고있는 큰 텍스트 블록을 쉽게 삭제할 수 있습니다.
단락이면 다음을 사용하십시오 d{(예 : 단락 수를 접두어로 붙일 수 있음)
괄호 안에 코드 블록이 있으면 다음을 사용하십시오. d%
파일이 끝날 때까지 텍스트가 나타나면 다음을 사용하십시오. dG
그것이 끝나는 방법을 안다면, 다음을 사용하십시오 : d/그리고 끝나는 텍스트를 입력하십시오 Enter(정규 표현식을 사용할 수도 있으므로 가능성은 무한합니다).
또는 시각 모드 ( V)를 사용하고 모션 키를 사용하여 텍스트를 빠르게 선택하고 (예 :) {제거하십시오 ( d).
또는 Lie Ryan이 제안한대로 d/search-string/e
현재 커서에서 검색된 문자열로 텍스트를 삭제 하는 데 사용하십시오 .
참조 : :help d
및 :help motion
추가 정보를 원하시면.
d/search-string/e
검색 문자열 자체를 포함하여 현재 커서에서 검색 문자열 끝까지 c/search-query
삭제하고 삭제 후 삽입 모드로 전환해야합니다. d/
with를 사용 set incsearch
하면 올바른 텍스트 범위에서 작업 중인지 여부를 대화식으로 파악하고 필요 이상으로 입력하지 않도록 검색 쿼리 입력을 중지 할시기를 알 수 있으므로 깔끔한 조합입니다.
d
와 a
(외부), 또는 i
(내부) 및 객체 지정 매우 유용합니다. 같은 개체 w
단어, p
단락, (
또는 b
대 (...)
, [
대 [...]
, {
또는 B
대 {...}
등 시각적 사업자 문서 .
모션 및 / 또는 텍스트 객체를 사용할 수 있습니다. 예를 들어을 사용하여 커서에서 다음 빈 줄까지 모든 것을 삭제할 수 있습니다 d}
. 커서가 단락 안에 있으면 단락이 dip
또는 로 삭제 될 수 있습니다 dap
. 커서가 HTML 태그 내에 있으면 dit
또는로 태그를 삭제할 수 있습니다 dat
.
이에 대한 좋은 니모닉은 " d elete i nside "및 " d elete a round"(단락 / 태그 / 괄호)입니다.
나는 보통
:<start>,<end>d
제공된 시작 줄과 끝 줄 번호 사이의 모든 줄이 삭제됩니다 (주어진 줄 포함).
start
및 둘다 end
는 절대 위치 번호, 패턴 또는 다른 위치의 오프셋 일 수 있습니다.
Vim의 범위 문서를 보는 것에 대한 doubleDown의 의견을 참조하십시오 . 유용한 팁이 있습니다.
예:
다음 파일이 있다고 가정하십시오.
1. The quick brown
2. fox jumps
3. over the
4. lazy dog.
그런 다음 명령을 사용하여 :2,3d
또는 :/fox/,/over/d
또는 :/quick/+1,/lazy/-1
또는 :+1,+2d
당신이 첫 번째 줄에있어 경우 또는 :-1,.d
세 번째 줄에 있다면, 당신은으로 끝날 :
1. The quick brown
4. lazy dog.
:set ruler
, 다음 찾을 텍스트의 상하 이동 start
과 end
줄 번호, 다음을 수행:<start>,<end>d
:+12,+24d
<start>
하고 <end>
이를 위해. 자세한 내용은을 참조하십시오 :h [range]
. 따라서 실제로는 기존보다 훨씬 더 유연합니다.
처리하고있는 구분 된 블록 (예 : 코드 또는 XML / HTML 태그) 인 경우 블록 시작 부분에 커서를 놓고 시각적 모드를 사용하여 %
전체 코드 블록을 빠르게 선택한 다음 d
그들을 삭제합니다.
dap
, 단락을 삭제 da(
, da{
, da[
, 괄호, 중괄호 또는 대괄호 delimeted 블록을 삭제합니다. HTML의 경우이 dat
태그를 삭제하고있는 da'
및 da"
문자열을 삭제합니다. 또한이 dip
, di(
구분 기호 내부에 모든 것을 삭제할 수 있지만 그대로 구분 기호를 떠나, 등 변종. 또는 vap
(resp vip
)를 사용하여 모든 (resp inner) 단락을 선택할 수 있습니다 . (그래서이 va(
와 vi(
.) 또한 존재 cap
및 cip
(또는 ca(
과 ci(
) 삭제 및 삽입 모드로 이동 (즉, "변화"). 그리고 yap
꺼낼
numbers.vim의 플러그인이 매우 유용합니다. 각 줄 앞에 줄 번호를 추가하는 향상된 방법입니다. 같이 'number'
하고 'relativenumber'
, 모두 하나에 roled!
설치 후 기본적으로 활성화되어 set number
있습니다. vimrc를 아직 가지고 있지 않은 경우 vimrc 에 추가 하려고합니다.
에서 일반 모드 는 비슷한 보인다 :set relativenumber
:
3 call plug#begin('~/.vim/plugged')
2
1 Plug 'myusuf3/numbers.vim'
7 set number█
1
2 " Add indentation 'guidelines' (:IndentLinesToggle or <F11>)
3 Plug 'Yggdroot/indentLine'
커서가있는 행을 제외하고 상대 행 번호를 표시합니다 (이 경우 7).
삽입 모드 로 전환하면 number
항상 절대 줄 번호를 표시하여 설정된 것처럼 작동 합니다.
4 call plug#begin('~/.vim/plugged')
5
6 Plug 'myusuf3/numbers.vim'
7 set number█
8
9 " Add indentation 'guidelines' (:IndentLinesToggle or <F11>)
10 Plug 'Yggdroot/indentLine'
더 많은 옵션과 몇 가지 명령 (홈페이지 확인)이 있지만 기본값은 대부분의 사람들에게 적합합니다.
set number
, set relativenumber
다음 autocmd InsertEnter * :set norelativenumber
과autocmd InsertLeave * :set relativenumber
d다른 답변에서 이미 설명한 것처럼 일반적인 입력 절차 와 동작을 사용할 수 있습니다 . EasyMotion 플러그인은 문제를 빠르고 쉽게 해결할 수있는 새로운 모션을 제공합니다.
현재 커서 위치에서 화면의 주어진 단어의 끝까지 삭제하려고한다면 동작 키는 <Leader>
<Leader>
e(정상 e
동작 과 유사 함 ) 것입니다. 그런 다음 해당 단어의 끝에 나타나는 강조 표시된 문자를 입력하십시오. 또한 라인 모션이 있으므로 현재 라인을 문제의 라인으로 삭제할 수 있습니다 <Leader>
<Leader>
j.
나는이 <Leader>
키를 설정 ,. 따라서 전체 명령은 d<Leader>
<Leader>
e{강조 표시된 문자}입니다.
보낸 사람 :help easymotion
:
EasyMotion은 vim에서 일부 모션을 사용하는 훨씬 간단한 방법을 제공합니다. 그것은 소요
<number>
중<number>
w 또는<number>
F를{char}
모든 가능한 선택을 강조 대상으로 직접 이동할 수있는 하나의 키를 누를 수 있도록하여.사용 가능한 모션 중 하나가 트리거되면 커서 앞이나 뒤에 보이는 모든 텍스트가 희미 해지고 모션 대상이 강조 표시됩니다.
편집하다:
EasyMotion의 github 저장소 는 https://github.com/Lokaltog/vim-easymotion에 있습니다.
easymotion을 사용하는 사람들에 대한 이 레딧은 재미있을 것입니다.
문제를 해결할 수있는 간단한 해결책이 있습니다.
제거하려는 텍스트 블록의 시작 부분에 커서를 놓고 수행하십시오 d50gg
.
현재 위치에서 텍스트의 50 번째 줄까지의 모든 행이 삭제됩니다.
EQ : 커서 라인에있는 경우 (46) , d50gg
삭제 4 개 라인.
G
vi에서도 작동하기 때문에 gg 대신 사용 하는 것이 좋습니다. 물론 :set number
행 번호를 찾는 데 항상 유용합니다.
선 강조 표시와 함께 시각적 모드를 사용하십시오.
코드 블록을 삭제하는 데이 방법을 선호합니다. 시각적 모드를 사용하여 커서를 오른쪽 열에 커서를 놓아 원하는 것을 삭제해야하기 때문에 전체 행을 삭제하기 때문에 선호합니다.
나는 relativenumber
항상 마음에 들지 않기 때문에 비주얼 모드에있을 때만 Vim을 활성화하도록 구성했습니다.
" Entering Visual mode
nnoremap <silent> v :set relativenumber cursorcolumn<CR>v
nnoremap <silent> <C-q> :set relativenumber cursorcolumn<CR><C-q>
nnoremap <silent> gv :set relativenumber cursorcolumn<CR>gv
nnoremap <silent> V :set relativenumber<CR>V
" When finished
augroup ClearCursorColumnAndLine
autocmd!
autocmd CursorHold * set norelativenumber nocursorcolumn nocursorline
augroup END
이렇게하면 작업이 쉬워집니다.
V49jd
타격 후 V목표 라인이 얼마나 멀리 있는지 볼 수 있기 때문 입니다.
이것은 장기적으로 성가신 것으로 판명 될 수 있지만 (상대 번호가 활성화 / 비활성화되면 텍스트가 오른쪽과 왼쪽으로 이동합니다), 지금까지 나는 그것을 즐기고 있습니다.
v<Esc>d50j
?
V
현명한 작업을 수행 할 것임을 알고 있다면 시작하여 d
마지막까지 남을 수 있습니다 .
move
이 끝까지 어떻게 할 수 있는지 설명 할 수 있다면 . 그런 다음 끝으로 삭제하는 것이 끝으로 이동하는 것과 다르지 않습니다.