tools/vim 92

Learn Vimscript The Hard Way - 53. Autoloading

Autoloading 이제 우리는 우리의 Potion 플러그인에 꽤 많은 기능을 추가하였다. 마치기 전에 중요한 기능을 더 추가하여 더 빛나게 만들어보자. 먼저 우리는 autoloading 기능을 추가하여 플러그인을 더 효율적으로 만들어 볼 것이다. How Autoload Works 지금은 유저가 플러그인을 로드하면 (Potion 파일을 열면) 모든 기능이 한 번에 로드된다. 우리의 플러그인은 아직 작기 때문에 큰 문제가 되지 않지만, 큰 플러그인의 경우 모든 코드를 로드하는 데에는 꽤 많은 시간이 소요된다. vim은 "autoload"를 사용하여 이 문제를 해결한다. Autoload는 코드 로딩을 실제로 필요할 때로 지연시킨다. 전체적으로는 별로 큰 퍼포먼스 향상이 이뤄지지 않을 수 있지만, 사용자가 ..

tools/vim 2020.05.09

Learn Vimscript The Hard Way - 52. External Commands - part two

External Commands - part two 해당 장도 두 포스트로 나누어서 작성하였다. 1부를 읽고 읽기를 권장한다. Displaying Bytecode Potion 컴파일러는 컴파일 되었을 때 생성되는 bytecode를 볼 수 있게 해주는 옵션을 제공한다. 이는 아주 low-level에서 디버깅을 하기 쉬워진다. 쉘에서 다음 명령어를 실행해보자. $ potion -c -V factorial.pn -- parsed -- code ... -- compiled -- ; function definition: 0x109d6e9c8 ; 108 bytes ; () 3 registers .local factorial ; 0 .local print_line ; 1 .local print_factorial ; ..

tools/vim 2020.05.08

Learn Vimscript The Hard Way - 52. External Commands - part one

External Commands - part one 해당 장도 두 포스트로 나누어서 작성할 예정이다. Vim은 UNIX의 "do one thing well" 철학을 따른다. 에디터에 필요한 기능을 쑤셔넣는 대신에, vim은 적절한 외부 커맨드를 선정하여 일을 위임한다. Potion 컴파일러와 interaction을 만들어서 vim의 외부 커맨드에 발을 담궈보자. Compliling 우리는 먼저 현재 potion file을 컴파일하여 실행하는 명령어를 추가할 것이다. 아주 많은 방법이 있지만, 지금은 간단하게 외부 커맨드를 사용하도록 하자. potion/ftplugin/potion/running.vim을 플러그인 레파지토리에 만들자. 이는 potion 파일들의 compiling과 running과 관련된 매..

tools/vim 2020.05.07

Learn Vimscript The Hard Way - 51. Potion Section Movement - part two

Potion Section Movement - part two 해당 장도 길이가 길기 때문에 두 파트로 나누어서 작성하였다. Potion section movement - part one에서 이어지는 글이다. Top Level Text Sections 첫 번 째 let pattern = '...'을 다음으로 변경해보자. let pattern = '\v(\n\n^\S|%^)'이 정규표현식의 동작을 이해하기 위해서 아래의 "section" 정의를 다시 기억해보자. 빈 줄 뒤에 오는 줄 (첫 글자가 띄어쓰기가 아닌)이나 파일의 첫줄 \v는 우리가 몇 번 다뤘던 "very magic" 모드이다. 나머지는 두 옵션으로 나눠진 정규표현식이다. 첫번째는 \n\n^\S인데, 이는 "빈 줄 ..

tools/vim 2020.05.06

Learn Vimscript The Hard Way - 51. Potion Section Movement part 1

Potion Section Movement - part one 해당 장도 길이가 길기 때문에 두 파트로 나누어서 작성하였다. 저번 장에 우리는 어떻게 section movement가 작동하는지 살펴보았다. 이를 potion 파일에 적용하기 전에 한번 다시 생각해보자. 우선 우리는 Potion 파일에서 "section"이 어떤 것을 의미할 것인지를 결정하여야 한다. 두 쌍의 section movement 명령어가 있으므로 우리의 사용자들을 위한 두가지 "schemes"를 마련할 수 있다. 다음 두 가지 스키마를 potion의 섹션으로 결정하자. 빈 줄 이후에 오는 모든 줄 이나 파일의 첫 줄(whitespace가 아닌 문자가 있는 줄) 첫 글자로 whitespace가 아닌 문자가 있고, 줄 안에 등호 문자..

tools/vim 2020.05.05

Learning Vimscript The Hard Way - 50. Section Movement Theory

Section Movement Theory 만약 당신이 vim의 section movement ([[, ]], [], ][)를 써 보지 않았다면, 지금 :help section을 읽는 시간을 가져보아라. 아직 헷갈려도 괜찮다. 나(저자)도 처음 읽었을 때 그랬었다. 우리는 코드를 작성하면서 이 movement들이 어떻게 동작하는지 살펴보고 다음 장엣허 이를 지원하는 potion 플러그인을 작성할 것이다. Nroff Files 4가지의 "section movement" 명령어는 파일의 "sections"간에 이동하는 것을 의미하고 만들어졌다. 이 모든 코멘드들은 기본적으로 nroff 파일에서 사용되도록 디자인되어졌다. Nroff는 LaTeX나 Markdown같은 언어이다. (UNIX man page에서 사..

tools/vim 2020.05.04

Learn Vimscript The Hard Way - 49. Advanced Folding - part 3

Advanced Folding - part 3 해당 장은 매우 길기 때문에 시리즈로 작성할 예정이다. Advanced folding - part 1 Advanced folding - part 2 Advanced folding - part 3 Finishing the Fold Function 꽤 긴 챕터였으므로, 이제 슬슬 folding 함수를 마무리지어보자. GetPotionFold 함수를 다음과 같이 수정해보라. function! GetPotionFold(lnum) if getline(a:lnum) =~? '\v^\s*$' return '-1' endif let this_indent = IndentLevel(a:lnum) let next_indent = IndentLevel..

tools/vim 2020.05.03

Learn Vimscript The Hard Way - Advanced Folding : part 2

Advanced Folding - 2/3 해당 장은 매우 길기 때문에 파트를 나눠서 작성할 예정이다. 이전 장을 읽고 이어 읽기를 추천한다. Blank Lines 우선 특수한 케이스인 빈 줄을 먼저 살펴보자. GetPotionFold을 다음과 같이 수정하자. function! GetPotionFold(lnum) if getline(a:lnum) =~? '\v^\s*$' return '-1' endif return '0' endfunction우리는 if절을 추가하여 빈 줄(blank line)에 대해 처리하였다. 어떻게 동작하는 것일까? 먼저 우리는 getline(a:lnum)을 사용하여 현재 줄의 내용을 string으로 받았다. 이를 '\v^\s*$&#3..

tools/vim 2020.05.02

Learn Vimscript The Hard Way - 49. Advanced Folding - part 1

Advanced Folding - 1/3 해당 장은 매우 길기 때문에 파트를 나눠서 작성할 예정이다. 저번 장에서는 vim의 indent 폴딩을 사용하여 potion 파일에 대해 빠르고 지저분한 fold를 추가하였다. factorial.pn을 열어서 zM으로 모든 폴딩이 닫혀있는 것을 확인하라. 해당 파일은 다음과 같아 보일 것이다. factorial = (n): +-- 5 lines: total = 1 10 times (i): +-- 4 lines: i string print 첫 번째 fold를 열면 다음과 같아진다. factorial = (n): total = 1 n to 1 (i): +--- 2 lines: # Multiply the running total. total. 10 times (i): ..

tools/vim 2020.05.01

Learn Vimscript The Hard Way - 48. Basic Folding

Basic Folding 만약 당신이 vim에서 folding을 한 번도 사용하지 않았다면, 당신은 무엇을 놓치는지 모를 것이다. :help usr_28을 읽고 일상적인 작업에서 이를 적용시키면서 시간을 보내보아라. 그것이 손에 조금 익었을 때 다시 해당 챕터로 돌아와라. Types of Folding vim은 6가지 다른 fold 방식을 제공한다. Manual 직접 손으로 fold를 생성하면 RAM에 저장된다. vim을 닫으면 fold들은 모두 사라지고 다시 만드어야 한다. 이 방식은 몇몇 custom mapping을 만들어 fold를 만들 때 쉽게 사용 가능하다. 이 책에서는 다루지 않지만, 쉽게 사용이 필요할 때 이런 방식을 사용할 수 있다는 점을 생각해 두면 좋다. Marker vim은 실제 텍스..

tools/vim 2020.04.29