vimscript 45

Learn Vimscript The Hard Way - 40. Paths

Paths vim은 텍스트 에디터이고, 텍스트 에디터는 (보통) 텍스트 파일로 작동한다. 텍스트 파일은 filesystem에 존재하고, 어떤 경로에 특정한 파일이 존재한다. vimscript는 경로에 대해 작업할 떄 사용하는 특별한 빌트인 함수들을 가지고 있다. Absolute Paths 외부 스크립트에서 해당 파일의 절대 경로를 알게 되면 유용한 경우가 있다. :echom expand('%') :echom expand('%:p') :echom fnamemodify('foo.txt', ':p')첫 번 째 명령어는 현재 수정중인 파일의 상대경로를 보여준다. %는 "현재 파일"을 의미한다. 두 번 째 명령어는 절대 경로를 보여준다. :p는 vim에서 ..

tools/vim 2020.04.20

Learn Vimscript The Hard Way - 39. Functional Programming

Functional Programming 잠시 휴식을 갖고 프로그래밍 스타일에 대해 이야기하는 시간을 가져볼 것이다. functional programming에 대해 들어본 적이 있을 것이다. 만약 당신이 Python, Ruby, Javascript, 특히 Lisp, Scheme, Clojure, Haskell 등의 프로그래밍 언어를 사용해 보았다면 이 방식에 아주 익숙할 것이다. vimscript는 kind-of-functional 스타일이 필요한데, 조금은 구식이다. 이를 조금 덜 고통스럽게 하기 위한 몇몇 헬퍼를 만들 수 있다. functional.vim을 만들어보자. 다음 장에서는 해당 파일을 이용하여 예시를 작성할 것이다. Immutable Data Structures 불행히도 vim에는 Clo..

tools/vim 2020.04.19

Learn Vimscript The Hard Way - 37. Dictionaries

Dictionaries vimscript의 마지막 변수 타입은 dictionary이다. vimscript의 dictionary는 python의 dict, Ruby의 hash, Javascript의 object와 비슷하다. dictionary는 중괄호 ({})로 만들어진다. 값은 여러가지 타입이 들어올 수 있지만, key는 string만이 들어올 수 있다. :echo {'a': 1, 100: 'foo'} {'a': 1, '100': 'foo'}vimscript가 100을 '100'으로 변환한 것을 볼 수 있다. 또한 vimscript는 Javascript와는 달리 딕셔너리 마지막에 trailing comma를 추가할 수 ..

tools/vim 2020.04.17

Learn Vimscript The Hard Way - 36. Looping

Looping 당신은 아마 프로그래밍 언어 책에서 35페이지만에 루프를 언급한 것에 놀랐을지도 모른다. vimscript는 텍스트에 특화된 여러 옵션을 제공해주기 때문에 loop가 다른 언어들만큼 필요하지는 않다. 하지만 언젠간 필요해질 수 있기 때문에 vim에서 지원하는 루프에 대해서 살펴볼 것 For Loops 첫 번째 루프는 for루프이다. Java, C나 Javascript를 사용했다면 조금 이상해 보이겠지만, 상당히 엘레강스한 방식으로 작동한다. python의 for 문과 거의 흡사하다 :let c = 0 :for i in [1, 2, 3, 4] : let c += i :endfor :echom c 10vimscript의 for 루프는 리스트(나 다음에 다룰 딕셔너리)를 순회한다. While L..

tools/vim 2020.04.16

Learn Vimscript The Hard Way - 35. List

Lists 우리는 많은 변수를 작업했지만, 아직 이를 합친 적은 없었다. vim은 두 가지 aggregate type을 지원하는데, 그 중 첫 째는 리스트이다. vimscript의 list는 순서가 있다. :echo ['foo', 3, 'bar'] ['foo', 3, 'bar']vim 리스트는 중첩도 가능하다. :echo ['foo', [3, 'bar']] ['foo', [3, 'bar']]Indexing vimscript 리스트는 파이썬같이 zero-indexed 방식 사용한다. 인덱싱 방식도 비슷하다. :echo [0, [1, 2]][1] [1, 2]파이썬처럼 뒤에서 인덱싱도 가능하다. ..

tools/vim 2020.04.15

Learn Vimscript The Hard Way - Grep Operator, Part Threee

Case Study: Grep Operator, Part Three 우리가 만든 "grep operator"는 잘 작동하지만, 두가지를 더 추가하여 vim 생태계에서 잘 사용되게 해보자 Saving Registers 이전에 만들었던 명령어 nnoremap g :set operatorfunc=GrepOperatorg@ vnoremap g :call GrepOperator(visualmode()) function! GrepOperator(type) if a:type ==# 'v' normal! `y" elseif a:type ==# 'char' normal! `[y`] else return endif silent execute "grep! -R " . shellescape(@@)..

tools/vim 2020.04.13

Learn Vimscript The Hard Way - 33. Case Study: Grep Operator, Part Two

Case Study: Grep Operator, Part Two 앞 장에서는 기본적인 해결책을 작성해 보았다. 이제는 그 명령어에 살을 붙여보자. 우리의 원래 목표는 "grep operator"를 만드는 것이다. 새로운 것들을 많이 다루어야 하겠지만, 우선 저번 장에서 했던 방식으로 진행해보자: 간단하게 시작해서 필요한 기능으로 바꾸기 이전 장에서 사용한 매핑 (g)을 동일하게 사용할 것이기 때문에 이전 장에서 ~/.vimrc에 추가한 매핑을 주석처리 해주자. vim 파일에서 주석은 줄 앞에 "를 추가하면 된다. " nnoremap g :silent execute "grep! -R " . shellescape(expand("")) . " .":copenoperator를 만드는 것은 여러 코멘드를 쉽게 작..

tools/vim 2020.04.12

Learn Vimscript The Hard Way - 32. Case Study: Grep Operator, Part One - 2/2

Case Study: Grep Operator, Part One 해당 장은 case study part one - 1/2에서 이어지는 글이다. Escaping Shell Command Arguments 앞 장에서 사용한 방법 (작은따옴표로 quoting하는 방법)에도 문제가 있다. 검색하려는 string에 작은따옴표가 포함된 경우이다. that's에 커서를 두고 매핑된 grep을 실행시켜보자. 만약 새로운 window라면 :nnoremap g :grep -R '' . 명령어로 매핑을 추가하고 예시를 진행해보자. that's 이를 해결하기 위해서 shellescape 함수를 사용할 수 있다. :help escape()와 :help shellescape()를 읽어서 어떻게 동작하..

tools/vim 2020.04.10

Learn Vimscript The Hard Way - 32. Case Study: Grep Operator, Part One - 1/2

Case Study: Grep Operator, Part One 해당 장은 꽤 많은 내용을 담고 있어서 두 장으로 나눠서 작성할 예정이다. (part one의 part one이다...) 이번 장에서는 꽤 복잡한 vimscript를 작성해 볼 것이다. 이전 장들에서 공부했던 내용도 있을 것이고, 새로 나오는 내용도 있을 것이다. 익숙하지 않은 명령어들이 나오면 :help를 잘 활용하자 Grep :grep을 한 번도 사용해 보지 않았다면 :help :grep과 :help :make를 읽어보길 바란다. quickfix-window를 사용해보지 않았다면 :help quickfix-window도 읽어보아라. (벌써부터 help text 읽을게 산더미...) 간결히 얘기해서: :grep ...은 외부의 grep 프..

tools/vim 2020.04.09

Learn The Vimscript The Hard Way - 31. Basic Regular Expressions

Basic Regular Expressions Vim은 기본적으로 텍스트 에디터이다. 즉, 당신의 vimscript 코드는 text를 처리하는데 많은 일을 할 것이라는 말이다. 다음 예시를 적어보자 (복붙) max = 10 print "Starting" for i in range(max): print "Counter:", i print "Done"위 예시는 파이썬 코드인데, regex를 연습할 예제이기 때문에 파이썬을 몰라도 상관 없다. 여기서는 기본적인 정규표현식을 알고 있다고 가정하고 설명한다. 혹시 정규표현식을 잘 모른다면 Learn Regex the Hard Way 책을 읽으라고 추천하고 있다. (learn regex the easy way도 참고할 만 하다) Highlighting 본격적으로 시..

tools/vim 2020.04.08