전체 글 586

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 - 38. Toggling

Toggling 첫번째 장에서 vim에서 옵션을 세팅하는 방법을 다뤘었다. set someoption!으로 해당 옵션을 "toggle"할 수 있다. 이는 우리가 매핑을 만들때 더욱 잘 쓰인다. 다음 명령어를 실행시켜보자. :nnoremap N :setlocal number!이제 N으로 number 옵션을 키고 끌 수 있다. relativenumber 옵션이 활성화 된 경우에는 number가 꺼져도 relative number가 출력되므로 이를 끄고 테스트해보자. setlocal norelativenumber 토글 매핑을 만드는 것은 우리가 별개의 두 키를 매핑시키지 않아도 되기 때문에 아주 편리하다. Toggling Options 토글 옵션을 하나 만들어보자. 다음을 ~/.vimrc에 추가해보자. (~/..

tools/vim 2020.04.18

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

karabiner element ESC 입력시 자동 영문 변환하기

~/.config/karabiner/assets/complex_modifications/에 .json 파일 생성 해당 파일에 룰 추가: https://pqrs.org/osx/karabiner/json.html#complex_modifications-data-structure 에 룰 설명 되어있음 Karabiner-Elements preference -> Complex Modifications -> Add rule 하여 해당 rule enabled { "title": "Convert to en when ESC", "rules": [ { "description":"Convert to en when ESC", "manipulators": [ { "type": "basic", "from": { "key_code..

tools/mac 2020.04.14

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

vim 자동완성의 끝판왕, coc.nvim

vim 자동완성: coc.nvim https://github.com/neoclide/coc.nvim Install " Use release branch (Recommend) Plug 'neoclide/coc.nvim', {'branch': 'release'} " Or build from source code by use yarn: https://yarnpkg.com Plug 'neoclide/coc.nvim', {'do': 'yarn install --frozen-lockfile'}만약 nodejs 가 설치되어 있지 않으면 설치해주자. curl -sL install-node.now.sh/lts | bashAdd exte..

tools/vim 2020.04.11

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