vi에서 여러 줄을 어떻게 삭제할 수 있습니까?


129

나는 다음을 따르려고 노력했다 :

VI 편집기에서 선택한 텍스트를 삭제하는 방법

그러나

5dd

준다

E492 : 편집기 명령이 아님 : 5dd

그런 다음 시도했습니다.

5d

한 줄만 삭제합니다. 여러 줄을 삭제하려면 어떻게해야합니까?


2
내가 기억하는 한, 5dd는 유효한 구문이어야하며 커서가있는 줄부터 5 줄을 삭제해야합니다. CAPS LOCK이 켜져 있고 숫자 키가있을 때 이동하는 키보드 레이아웃을 사용하고 있습니까?
Eric J.

답변:


132

명령 모드 (일명 "Ex 모드")에서 명령을 입력하는 것처럼 들립니다. 그 맥락에서 :5d5 번 줄을 제거 할 것입니다. 내용은 5dd즉, 커서에서 시작하여 다섯 개 결과의 줄을 제거 - - 의도 한대로 작업을 일반 모드에서 입력으로 명령을 접두사하지 않습니다 :.



142

줄 번호를 알고 있으면 여러 (범위) 줄을 삭제할 수 있습니다.

:[start_line_no],[end_line_no]d

참고 : d는 삭제를 나타냅니다.

여기서
start_line_no는 삭제할 시작 줄 번호이고 end_line_no는 삭제할 끝 줄 번호입니다. 시작과 끝을 포함하여 시작과 끝 사이의 줄이 삭제됩니다.

예 :

:45,101d

45와 101을 포함하여 45와 101 사이의 행이 삭제됩니다.


14
를 사용 $하여 파일의 마지막 줄도 표시 할 수 있습니다 . 따라서 :45,$d45에서 끝까지 모든 줄을 삭제합니다.
freethebees

당신은 같은 패턴을 사용할 수 있습니다/<\/div>/
비욘

1
현재있는 라인에서 범위를 시작하려면 할 수 있습니다:.,[end_line_no]d
Joe

15

일반 모드에서 사용하기 위해 나열된 명령 ( :명령 모드의 접두사 ).
Vim에서 테스트되었습니다.

라인 금액별 :

  • num- 현재 커서 위치에서 시작 카운트를 시작하는 numdd을 삭제합니다 (예 : 현재 줄과 그 아래 4 줄 삭제 => 현재 줄과 그 아래에있는 ( num-1 ) 줄 삭제5dd )
  • NUMdk - 삭제 NUM의 전류 선 및 전류 선 자체에서 라인을 (예를 들면 3dk현재의 라인과 상기 3 개 행을 삭제한다 => 현재 라인 삭제 NUM 그 위에 선 )

줄 번호로 :

  • dNUM은G - 라인 삭제됩니다 현재 줄에서을 (포함) UP 라인 번호 NUM (포함) (커서가 줄에 현재있는 경우 예를 들어 5 d2G삭제됩니다 라인 2-5 포함)
  • dNUM은gg - 행을 삭제합니다 현재 라인에서 (포함) DOWN 라인 번호에 NUM (포함) (커서가 줄에 현재있는 경우 예를 들어 2 d6gg2-6 행을 삭제 포함합니다)
  • ( 유일한 명령 모드 ) :NUM1의 ,NUM2는d - 라인을 삭제합니다 줄 번호 NUM1 (포함) DOWN 라인 번호에 NUM2 (포함)를 . 참고 : num1num2 보다 크면 vim이Backwards range given, OK to swap (y/n)?

1
이것은 num 'd' 'd'가 커서 아래를 삭제하려고한다는 것을 깨닫지 못했기 때문에 나를 도왔습니다. 커서 위의 줄을 지우려고 파일 맨 아래에 커서가 있습니다! 도와 주셔서 감사합니다!
조나단 차드 Faling

줄 번호로 삭제 : ': <start>, $ d'는 파일이 끝날 때까지 삭제됩니다.
Devolus

11

비 시각적 모드를 선호하고 줄 번호를 인정한다면 또 다른 간단한 방법을 제안하고 싶습니다.

45 행에서 101 행까지의 텍스트를 삭제하고 싶습니다.

내 방법은 명령 모드에서 아래 명령을 입력하는 것이 좋습니다.

45Gd101G

읽습니다.

45 행 ( 45G)으로 이동 한 다음 d현재 행에서 101 행 ( )까지 텍스트 ( )를 삭제합니다 101G.

에 있습니다 vim당신이 사용할 수있는 gg대신에 G.

@Bonnie Varghese의 대답과 비교하십시오.

:45,101d[enter]

그의 대답에서 위의 명령은를 포함하여 9 번 입력 enter해야하며 내 대답에는 8-10 번 입력해야합니다. 따라서 내 방법의 속도는 비슷합니다.

개인적으로, 나는 나 자신이 선호 45Gd101G이상 :45,101d이 경우가에서 VI의 명령 구문에 스틱처럼 때문에 :

+---------+----------+--------------------+
| syntax  | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command |   45G    |        d101G       |
+---------+----------+--------------------+

8

d5d 5 줄 "자르기"

나는 보통 다음과 같이 중간에 숫자를 던집니다.

d7l = 7 글자 삭제


7

Esc키를 눌러 편집 모드가 아닌지 확인하십시오. 삭제할 첫 번째 줄에 커서를 놓습니다. 를 입력하십시오 :5dd. 현재 줄과 다음 네 줄을 삭제해야합니다.

또는 줄 번호 매기기가 켜져있는 경우 ...

Esc키를 눌러 편집 모드가 아닌지 확인하십시오. :#,#d'#'은 삭제할 시작 및 끝 줄 번호를 나타내는 곳에 입력 합니다.


처음에는 콜론과 함께 작동한다고 생각하지 않습니다.
Outcast

@PoeteMaudit 유효한 vi 명령입니다. 콜론은 vi가 커서를 화면 하단으로 이동시키고 라인 편집기 명령을 받아들이도록합니다.
Kenster

5
  1. Esc 삽입 모드 종료
  2. :1enter 줄 1로 이동 ( '1'을 관심있는 줄로 대체)
  3. 5dd 5 줄 삭제 (현재 줄에서)

유형 (번호가 매겨진 줄).:set number


3

특정 라인 트리거 후에 범위를 삭제하려면 다음과 같이 사용할 수 있습니다.

:g/^TMPDIR/ :.,+11d

.NET Framework를 만날 때마다 11 줄 (포함)이 삭제됩니다 ^TMPDIR.


0

그것은 ddx가 아니라 dxd입니다.

5 줄을 삭제하려면 삭제할 첫 번째 줄의 시작 부분에 커서를 놓고 d5d


0

모든 줄을 삭제하려면-ESC gg dG 몇 줄을 삭제하려면 5라고 말하고 ESC 5dd를 사용하십시오.


-1

다음과 같이 할 수 있습니다 ..

  1. 삭제하려는 위치에 커서를 놓습니다.
  2. 시각적 선택을 시작하려면 "v"를 누르십시오.
  3. 화살표 키를 사용하여 삭제하려는 위치로 커서를 이동합니다.
  4. 라인을 삭제하는 "d"를 누르십시오.
  5. 이제 ": x!"를 사용하여 저장하고 종료합니다.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.