기본적으로 vim의 기능이 마음에 들지 않거나 내가 원하는 기능이 플러그인에 없는 상황이 종종 있습니다.

그렇다고 vim스크립트를 배우자니 귀찮은 상황에 유용한 방법중 하나가 파이썬 등의 언어를 갖다 넣는 방법이 있습니다.

들어가기에 앞서 일단 당신이 쓰는 vim이 무엇을 지원하나 확인해봅시다.

python3에 +표시 되어있는것이 보인다면 python으로 vim을 제어할 수 있습니다.

function! Calc()
python3 <<endPython
import vim 
currentLine = vim.current.line
result = eval(currentLine)
row, col = vim.current.window.cursor
vim.current.buffer[row-1] += " = " + str(result)
endPython
endfunction

위 코드를 vimrc에 추가합니다.
현재 커서가 올라가있는 라인의 수식을 계산해서 결과를 써주는 코드입니다.
vim함수를 만들고 안에는 python코드를 작성한 것 입니다.

물론 수식은 python코드여야 한다.
물론 수식은 python이어야 한다

:call Calc() 로 위에서 정의한 함수를 호출 할 수 있습니다.

잘 동작한다.

python3 ~~ endpython 형태의 구분은 vim함수 외부에서도 사용이 가능합니다.

logPath = "/home/cube/vimlog"
def writeLog():
	#현재 날짜 디렉토리에 편집한 파일 로그 적기

	path = vim.eval('expand("%:p")') #파일 전체 경로

	now = datetime.datetime.now()
	ymd = now.strftime("%Y-%m-%d")

	if os.path.isdir(logPath) == False:
		os.mkdir(logPath)

	logFile = open(logPath + "/" + ymd, "a")
	logText = path + "---" + str(now) + "\n"

	logFile.write(logText)
	logFile.close()

위처럼 정의해 해두고 :py3 writeLog() 형태로 호출 가능합니다.

저는 파일 저장시 로그를 남기는게 목적이였기 때문에 vimrc에 아래와 같이 되어있습니다.

autocmd BufWritePre * :py3 writeLog()

위 예제 및 더 다양한 코드는 vimrc는 https://github.com/bedrock17/vimrc 에서 확인 가능합니다.

결과적으로는...

과도한 환경 커스터마이징은 유지보수도 귀찮고 그 환경에 종속되어버리는 상황이 생겨버려서 위 리포지토리를 버리고 커동vimrc를 베이스로 쓰고있습니다.