선택을 별도의 파일로 이동


12

vim을 사용하면 텍스트를 새 파일로 어떻게 옮길 수 있습니까? 현재로서는 이렇게합니다.

  • 텍스트를 선택하십시오
  • 사용하다 :w new_file
  • 텍스트를 다시 선택하십시오
  • 텍스트를 삭제

더 효율적인 방법이 있습니까?

전에

a.txt

sometext
some other text
some other other text
end

a.txt

sometext
end

b.txt

some other text
some other other text

답변:


4

이러한 사용자 정의 명령은 어떻습니까?

:command! -bang -range -nargs=1 -complete=file MoveWrite  <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _
:command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _

1
이것은 매우 추악하지만, 한 번에 내가 요청한 것과 정확히 일치하는 것 같습니다 (시도했습니다). +1하고 수락했습니다. 나는 이것을 빨리 할 수있는 네이티브 방법을 찾고 있었지만 하나가없는 것처럼 보이므로 잘 할 것입니다. 감사!
greg0ire

1
아름다움은 보는 사람의 눈에 있습니다. 나는 이것이 매우 우아하다는 것을 안다. .vimrc에 한 번만 입력하면됩니다.
Ingo Karkat

"매우 추악한"shoud는 "매우 익숙하지 않은"것이 맞습니다. 당신의 명령은 매우 편리합니다. 그리고 나는 확실히 내 .vimrc에 그것을 새길 것이라고 생각합니다
greg0ire

8

"텍스트를 새 파일로 이동"한다는 것은 현재 파일에서 해당 텍스트를 잘라 내고 해당 텍스트 만 포함하는 새 파일을 만드는 것을 의미한다고 가정합니다.

다양한 예 :

  • :1,1 w new_file 줄 번호 1의 텍스트 만 포함하는 새 파일을 만들려면
  • :5,50 w newfile 5 행에서 50 행까지의 텍스트가 포함 된 새 파일을 작성하려면
  • :'a,'b w newfile마크의 텍스트가 포함 된 새 파일을 만듭니다 a마크를b
    • 사용하여 마크를 설정 ma하고 mb어디 이제까지 당신이 좋아

위의 내용은 텍스트 만 복사하고 해당 텍스트가 포함 된 새 파일을 만듭니다. 그런 다음 나중에 삭제해야합니다.

동일한 범위와 d명령을 사용하여 수행 할 수 있습니다 .

  • :5,50 d 5 행에서 50 행으로 텍스트를 삭제하는 방법
  • :'a,'b d마크에서 텍스트를 삭제하는 a표시로b

또는 dd단일 회선 케이스 에 사용 합니다.

대신 시각적 모드를 사용하여 텍스트를 선택한 다음 텍스트를 선택하는 :동안 적중 하면 명령 행에 다음이 표시됩니다.

:'<,'>

선택한 텍스트를 나타냅니다. 그런 다음 명령을 확장하여 다음을 수행 할 수 있습니다.

:'<,'>w >> old_file

어떤 것이다 추가 기존 파일에 텍스트를. 그런 다음 위와 같이 삭제하십시오.


짧막 한 농담:

:2,3 d | new +put! "

고장 :

  • :2,3 d -2 ~ 3 행 삭제
  • | 기술적으로 이것은 첫 번째 명령의 출력을 두 번째 명령으로 리디렉션하지만 첫 번째 명령은 아무것도 출력하지 않으므로 명령을 함께 연결하는 것입니다.
  • new -새로운 버퍼를 연다
  • +put! "-명명되지 않은 레지스터 ( ") 의 내용을 버퍼에 넣습니다.
    • 뱅 ( !)은 내용이 현재 줄 앞에 놓 이도록합니다 . 이로 인해 파일 끝에 빈 줄이 생깁니다. 파일이 없으면 파일 맨 위에 빈 줄이 있습니다.

당신의 가정은 옳습니다. 이것은 좋아 보인다, 나는 테스트 할 것이다. 2. 좀 더 설명해 주시겠습니까? 나는 범위에 익숙하지 않습니다. 편집 : 두 번째 줄에서 이것을 시도하면 첫 번째 줄이 두 번째 줄이 아닌 다른 파일에 기록됩니다.
greg0ire

@ greg0ire 나는 조금 뒤로 그것을 얻었다, 나는 더 잘 설명하기 위해 편집 할 것이다
embedded.kyle

질문을보다 명확하게하기 위해 예를 추가했습니다.
greg0ire

@ greg0ire 나는 대답을 수정했다. 여전히 두 단계입니다. 첫 번째는 복사하고 씁니다. 두 번째는 삭제합니다.
embedded.kyle

1
좋은 해결책! '<,'>d | new | 0put "명확성 을 위해 쓸 수도 있습니다 .
초에 출발

1

@ embedded.kyle의 답변 과이 Q & A 를 기반으로 파일에 선택을 추가하고 현재 파일에서 삭제하기 위해이 하나의 라이너로 끝났습니다. 로 일부 라인을 선택한 후 다음을 Shift+V누르고 :실행하십시오.

'<,'>w >> test | normal gvd 

첫 번째 부분은 선택된 줄을 추가합니다. 두 번째 명령은 일반 모드로 들어가고 gvd마지막 선택을 선택한 다음 삭제합니다.


0

시각 모드에서 텍스트를 선택한 다음을 눌러 y버퍼에 "잉크"하거나 (복사) 버퍼 d에 "삭제"하려면을 누릅니다.

그런 다음 :split <new file name>vim 창을 분할 p하고 눌린 텍스트를 붙여 넣을 수 있습니다. 정상적으로 파일을 작성하십시오.

분할을 다시 닫으려면 닫으려는 분할을 전달하십시오 :q.


1
선택, 쓰기, 선택, 삭제의 4 단계가 있습니다. 귀하의 방법으로 6 단계가 있습니다 : 선택, 삭제, 분할, 붙여 넣기, 쓰기, 닫기. 더 효율적인 것을 요청했습니다 : P
greg0ire

분할을 :x대신 통과하면 쓰기와 닫기를 하나로 결합하여 5 단계로 만들 수 있습니다. : P
Xyon

더 낫지 만 5 여전히> 4 : P
greg0ire
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.