programing

vim-줄을 세지 않고 큰 텍스트 블록을 삭제하는 방법?

new-time 2020. 5. 13. 21:26
반응형

vim-줄을 세지 않고 큰 텍스트 블록을 삭제하는 방법?


vim에서는 종종 큰 텍스트 블록을 삭제하거나 복사합니다. 예를 들어 텍스트 줄을 세어

50dd

50 줄을 삭제할 수 있습니다.그러나 삭제할 줄 수를 알지 않고도이 큰 텍스트 블록을 어떻게 삭제합니까?


저는 vim 전문가는 아니지만이 상황에서 사용하는 것은 "시각 모드"입니다. 명령 모드에서

V

(capital)을 입력하십시오 . 그런 다음 위 / 아래로 이동하여 삭제하려는 블록을 강조 표시합니다 (모든 일반적인 이동 명령이 작동 함). 그런 다음

x

또는로 제거하십시오

d

.


시작 줄로 이동하여 입력하십시오

ma

( "a"표시). 그런 다음 마지막 줄로 이동하여

d'a

"a"를 표시하려면 삭제 하십시오 .현재에서 표시된 행까지의 모든 행이 삭제됩니다 (포함). 또한 환경이 후자에게 축복을받지 않을 가능성이

vi

있을 때 와 호환됩니다

vim

.


당신은 (어떤 명령도 삭제 옵션을 사용할 수 있습니다) 또한 비주얼 모드를 사용할 수 있습니다

vipvap

, 단락을 선택

v2ap

두 단락의 선택

dap

, 작품

d2ap

도.

[ ]

같은 블록 내에서 삭제할 수 있습니다

da[

참고로 : 객체 유형. vim 문서에서 : 섹션 4.

http://vimdoc.sourceforge.net/htmldoc/visual.html

4. Operating on the Visual area             *visual-operators*

...    
The objects that can be used are:
aw  a word (with white space)           
iw  inner word                  
aW  a WORD (with white space)           
iW  inner WORD                  
as  a sentence (with white space)           
is  inner sentence                  
ap  a paragraph (with white space)          
ip  inner paragraph                 
ab  a () block (with parenthesis)           
ib  inner () block                  
aB  a {} block (with braces)            
iB  inner {} block                  
a<  a <> block (with <>)                
i<  inner <> block                  
a[  a [] block (with [])                
i[  inner [] block                  

여기에는 더 나은 답변이 많이 있지만 완전성을 위해 위에서 언급 한 훌륭한 답변 중 일부를 읽기 전에 사용했던 방법을 언급 할 것입니다.24-39 행에서 삭제한다고 가정하십시오. ex 명령을 사용할 수 있습니다

:24,39d

당신은 또한 사용하여 라인을 k 수 있습니다

:24,39y

24-39 줄 이상을 찾아서 바꾸십시오.

:24,39s/find/replace/g

당신이를 통해 행 번호를 설정 한 경우

set number

당신 간단하게 할 수 있습니다

dNNG

현재 위치에서 NN을 줄을 삭제한다. 따라서 삭제하려는 줄의 시작 부분으로 이동하고 삭제하려는

d50G

마지막 줄이라고 가정하면됩니다.


그것은

큰 블록

무엇인지에 달려 있습니다. 어쩌면 당신은 단락을 삭제하는 것을 의미

dip

할 것입니다.


몇 가지 가능성이 있으며, 가장 좋은 것은 작업하는 텍스트에 따라 다릅니다. 두 가지 가능성이 떠 오릅니다.

  • 시각 모드 ( V,, S-V...)로 전환 하고 커서를 움직여 텍스트를 선택한 후d
  • 다음을 사용하여 전체 단락을 삭제하십시오. dap

전체 블록이 화면에 표시되면 상대 숫자 설정을 사용할 수 있습니다. : help relativenumber를 참조하십시오. 7.3에서 사용 가능


커서를 블록의 시작 또는 끝 부분에 놓고 시각적 모드 (shift-v)로 들어갈 수 있습니다. 그런 다음 원하는 블록이 강조 표시 될 때까지 위 또는 아래로 이동하십시오. 마지막으로 y를 눌러 텍스트를 복사하거나 d를 눌러 텍스트를 자릅니다.


여기에 이미 언급 된 다른 동작과 함께 동작도

/{pattern}<CR>

있으므로 foo가 포함 된 행으로 삭제하려는 경우을 수행 할 수 있습니다

dV/foo<CR>

.

V

기본적

/

으로 문자 방식 이므로 모션을 선 방향으로 강제하기 위해 여기에 있습니다 .


줄을 세는 것은 너무 지루하지만 '단락'을 세는 것은 그렇게 나쁘지 않습니다. '{'및 '}'은 커서를 커서 전후의 첫 번째 빈 줄로 각각 이동합니다. 커서 이동 작업은 삭제와 결합 할 수 있으며 다른 몇 가지 답변도 비슷한 방식 (행은 dd, 문서 끝은 dG 등)을 사용했습니다.

 

예를 들면 다음과 같습니다.

/* Lorem ipsum dolor sit amet, consectetur adipiscing elit. */

Lorem *ipsum(void) {
  return dolor(sit, amet);
}

If your cursor starts above the comment block, 'd}' deletes the comment block, and 'd2}' deletes both the comment block and the code block. If your cursor starts below the code block, 'd{' deletes the code, and 'd2{' deletes both. Of course, you can skip over one block by moving the cursor first: '{d{' or '}d}'.

If you're consistent with your whitespace, or you can count the paragraphs at a glance, this should work. The Vim help file has more cursor tricks if you're interested.


You can also enter a very large number, and then press dd if you wish to delete all the lines below the cursor.


Deleting a block of text

Assuming your cursor sits at the beginning of the block:

V/^$<CR>d (where <CR> is the enter/return key)

Explanation

  • Enter "linewise-visual" mode: V
  • Highlight until the next empty line: /^$<CR>
  • Delete: d

Key binding

A more robust solution:

:set nowrapscan
:nnoremap D V/^\s*$\\|\%$<CR>d

Explanation

  • Disable search wrap: :set nowrapscan
  • Remap the D key (to the following commands): :nnoremap D
  • Enter "linewise-visual" mode: V
  • Highlight until the next empty/whitespace line or EOF: /^\s*$\\|\%$<CR>
  • Delete: d

참고URL : https://stackoverflow.com/questions/5362363/vim-how-to-delete-a-large-block-of-text-without-counting-the-lines

반응형