Vim에서 붙여 넣기 시 들여 쓰기, 자동 주석 처리 문제

PROBLEM DESCRIPTION or QUESTION


Vi(Vim) 사용 시 문장열을 붙여 넣기 할 때 들여 쓰기가 제대로 되지 않습니다.

어떤 경우에는 자동으로 주석 처리까지 되는 경우가 있습니다.

RESOLUTION


말씀하신 현상은 vim이 자동 들여 쓰기(autoindent) 설정이나 자동 주석 처리 설정이 되어 있을 때 나타나는 현상입니다.
https://stackoverflow.com/questions/15503557/texts-distorted-after-pasting-on-vim 
https://superuser.com/questions/271023/can-i-disable-continuation-of-comments-to-the-next-line-in-vim


터미널 기반의 Vim은 기본적으로 사용자의 입력에 의한 문자 삽입과 붙여 넣기에 따른 문자 삽입을 구분하지 않습니다. 


자동 들여 쓰기가 설정된 상태에서 탭 문자가 들어 있는 문자열을 붙여 넣기할 때 이 문제가 생깁니다.

탭이 포함되어 있는 문자열을 붙여 넣고자 할 때, 다음 옵션 중 하나를 실행하여야 합니다.
:set noai
:set formatoptons-=cro
또는 
:set paste


위 설정 중 ':set paste' 명령을 권해 드립니다.

다른 자동 들여 쓰기(smartindent)나 자동 주석 처리 설정(formatoptions) 등으로도 붙여 넣기 시 원래 내용과  다르게 붙여 넣어지는 경우가 있습니다.
이런 모든 상황에서도 :set paste로는 원본 내용대로 붙여 넣기가 됩니다.
다음은 Xshell의 스크립트 기능과 사용자 정의 단추 키 설정 기능을 이용하여 붙여 넣기 기능을 구현한 VB 스크립트입니다.
Sub Main
	Set objHTML = CreateObject("htmlfile")
	txt = objHTML.ParentWindow.ClipboardData.GetData("text")
	txt = replace(txt, chr(13)+chr(10), chr(10))
	xsh.Screen.Send chr(27)
	xsh.Screen.Send ":set paste"+vbCr
	xsh.Screen.Send "a"
	xsh.Screen.Send txt
	xsh.Screen.Send chr(27)
	xsh.Screen.Send ":set nopaste"+vbCr
	xsh.Screen.Send "a"
End Sub

이 스크립트 파일을 '도구 → 옵션'의 '키보드와 마우스'  내 '키 매핑'에서 원하는 키에 등록하거나 빠른 명령 버튼에 등록하여 사용할 수 있습니다.

: 단축 키에 등록


: 빠른 명령 버튼에 등록