vim에서 indent를 쉘 명령으로 실행시키기

esrevinu의 이미지

안녕하세요?

vim에서 indent라는 프로그램을 이용해서 C 소스코드를 편집하면서 정렬하고자 키 매핑을 다음과 같이 했습니다.

map <F2> :%!indent<CR>

정렬은 잘 되는데 커서가 맨 위로 가버립니다. 원래 있던 곳 근처에 있도록 하고 싶은데 어떻게 하면 되나요?

mark 도 안 되고 다른 방법은 모르겠네요. 그리고 = 명령은 들여쓰기만 해 줄 뿐 indent처럼 해 주지는 못하는 것 같네요. 맞나요?

감사합니다.

esrevinu의 이미지

다음과 같이 .vimrc 에 적어 주면


fun BenIndent()
  let oldLine=line(".")
  normal(gg=G)
  execute ":" . oldLine
endfun

map -- :call BenIndent()<CR>

-- 만으로 indent를 하고 본래의 줄로 돌아 오네요.

이것과 비슷하게 저도

fun MyIndent()
  let oldLine=line(".")
  execute ":%!indent"
  execute ":" . oldLine
endfun

map <F2> :call MyIndent()<CR>

그런데 어디를 고쳐야 vim 자체 또는 플러그인의 indent 기능을 수정할 수 있을까요? 아니면 indent 명령 정도의 기능을 해주는 플러그인 같은 것이 있을까요?