[질문]copy 하고 vi 에 paste 할때...

익명 사용자의 이미지

안녕하세요

제가 만약

aaa
bbb
ccc 라고 저장되어 있는 텍스트를 카피해서 vi 에 붙히면

aaa
bbb
ccc

이렇게 한 탭씩 옆으로 복사가 됩니다. 이게 만약 1000 라인 정도 되면
이걸 똑바로 올리게 하는 방법 없나요?

익명 사용자의 이미지

보통 제가 사용하는 방법중 한가지는 파일이름을 .txt같은 일반
문서로 지정하는 방법입니다.
.c, .h, .java 같은 확장자를 붙이면 vi는 각 확장자에 맞는 형
태의 기능으로 문자들을 배열하기때문에 생기는 문제입니다.
또한가지는 vi의 기능을 이용하는 방법입니다.
command prompt상태에서 다음을 입력하면 모든 탭을 없앨 수 있
습니다.

%s/\t//g

%는 모든 라인을 뜻합니다. 특정라인만 바꾸기를 원한다면

1,10s/\t//g

하면 1에서 10라인까지의 탭만 없애줍니다.
s는 Search를 나타내고 /\t/는 /과 /사이의 문자를 찾으라는
소리입니다. 만일 s/abcd/ 라고 되어있다면 abcd를 찾게 됩니다.
다음의 // 는 아무것도 아닌 즉 지우라는 소리죠. 만일 탭을
공간 4개로 치완하려면 s/\t/ /g 하면 됩니다.
\t는 C에서 나타내는 [Tab]에대한 기호입니다. 간단하게 \n은
Newline, \r은 carriage Return을 나타냅니다.
보통 MS-DOS용 문서를 가져와서 vi로 열면 '^M'이라고 표시 되
는 형식이 \n입니다.
이것도 같은 방법으로 없앨수 있습니다.

%s/^M//g

여기서 ^M은 '^'과 'M'을 넣는게 아니라 특수문자를 넣어야합
니다. 넣는 방법은 [Ctrl] + [v]를 누른후에 [Ctrl] + [m]을
누르면 ^M이 화면에 표시됩니다. 물론 ^M은 한글자로 취급됩니다.

익명 사용자의 이미지

vim에는 paste mode가 있습니다.

set paste
한 다음에 붙이고,
set nopaste
해서 editing을 계속 하면 됩니다.

혹은,

r !cat
해서 붙인 후, ctrl+d를 눌러도 됩니다.

익명 사용자의 이미지

set noai