Se ha denunciado esta presentación.
Utilizamos tu perfil de LinkedIn y tus datos de actividad para personalizar los anuncios y mostrarte publicidad más relevante. Puedes cambiar tus preferencias de publicidad en cualquier momento.

Android Studio에서 vim사용과 오픈소스 ideavim 커스터마이징

1.223 visualizaciones

Publicado el

발표 스크립트를 한국어 자막으로 추가해 두었습니다.

안드로이드 앱을 개발할 때 사용하는 IDE(Android Studio) 장점과 Vim의 장점을 섞어 개발하면 코드 생산성을 높이는데 도움을 줍니다. 오픈소스 JetBrains Plugin ideaVim을 커스터마이징한 경험을 공유합니다.

Publicado en: Software
  • Hello! Get Your Professional Job-Winning Resume Here - Check our website! https://vk.cc/818RFv
       Responder 
    ¿Estás seguro?    No
    Tu mensaje aparecerá aquí

Android Studio에서 vim사용과 오픈소스 ideavim 커스터마이징

  1. 1. kimkevin@DroidNights2018: ~
  2. 2. kimkevin@DroidNights2018: ~ 1./** 2. * Created by kimkevin 3. * imkimkevin@gmail.com 4. * @imkimkevin 5. * github.com/kimkevin 6. */ 7. ~ ~ ~ ~ ~
  3. 3. kimkevin@DroidNights2018: ~ What is Vim? Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems. Vim is often called a "programmer's editor," and so useful for programming that many consider it an entire IDE. Vim is perfect for all kinds of text editing, from composing email to editing configuration files. – Johnny Appleseed
  4. 4. kimkevin@DroidNights2018: ~ What is Vim? Vim is a highly configurable text editor built to enable efficient text editing. It is an improved version of the vi editor distributed with most UNIX systems. Vim is often called a "programmer's editor," and so useful for programming that many consider it an entire IDE. Vim is perfect for all kinds of text editing, from composing email to editing configuration files. – Johnny Appleseed Vim는 유닉스 환경에서 가장 많이 사용되 는 문서 에디터이다. 리눅스에서 뿐만 아니 라 macOS에서도 기본 에디터로 사용되고 있다. 책이나 문서를 통해 혼자서 배우기는 어렵지만 익히고 나면 코드 생산성에 큰 도움을 준다.
  5. 5. kimkevin@DroidNights2018: ~ IdeaVim is a Vim emulation plugin for IDEs based on the IntelliJ platform. IdeaVim can be used with IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Cursive, and Android Studio. – Jetbrains ideavim GitHub What is IdeaVim?
  6. 6. kimkevin@DroidNights2018: ~ IdeaVim is a Vim emulation plugin for IDEs based on the IntelliJ platform. IdeaVim can be used with IntelliJ IDEA, PyCharm, CLion, PhpStorm, WebStorm, RubyMine, AppCode, DataGrip, GoLand, Cursive, and Android Studio. – Jetbrains ideavim GitHub What is IdeaVim?JetBrains에서 개발한 오픈 소스이며 IntelliJ 플랫폼 기반의 IDE에서 vim을 사용 할 수 있도록 플러그인으로 제공한다. Android Studio의 Plugins 메뉴에 ‘Browse Repositories’에서 검색하면 설치 할 수 있다.
  7. 7. kimkevin@DroidNights2018: ~ $ How to use Vim in Android Studio
  8. 8. kimkevin@DroidNights2018: ~ 1. Basic Vim Shortcuts 2. 3.
  9. 9. kimkevin@DroidNights2018: ~
  10. 10. kimkevin@DroidNights2018: ~ 누구나 처음 이 시트를 보면 막막함을 느낀 다. “과연 언제 익숙해질 수 있을까?” vi 치트시트를 보면 한 키마다 기능을 가지 고 있는데, 무엇을 어떻게 써야하는지 파악 하는데 오랜 시간이 걸린다.
  11. 11. kimkevin@DroidNights2018: ~
  12. 12. kimkevin@DroidNights2018: ~ 그 중에서 자주 사용하는 키를 보면 주로 단 어부터 라인, 블럭 단위로 커서를 자유롭게 이동할 수 있는 키를 많이 사용한다. 추가적으로 복사, 삭제, 붙여넣기, 검색 등 을 자주 사용하고 있다.
  13. 13. kimkevin@DroidNights2018: ~ https://cdn.pixabay.com/photo/2016/11/19/10/46/apple-1838564_1280.jpg navigate on a single line Easy navigation on a word a line a paragraph without using Mouse
  14. 14. kimkevin@DroidNights2018: ~ https://cdn.pixabay.com/photo/2016/11/19/10/46/apple-1838564_1280.jpg navigate on a single line Easy navigation on a word a line a paragraph without using Mouse vim의 가장 큰 장점은 단어, 라인, 블록간의 쉬운 네비게이션이다. 하나의 키 또는 여러 키의 조합으로 효율적인 편집이 가능 하다.
  15. 15. kimkevin@DroidNights2018: ~ public void setUser(User user) // $ : the end of line public void setUser(User user) // 0 : the start of the line public void setUser(User user) // w : move forward word public void setUser(User user) // b : move backward word public void setUser(User user)
  16. 16. kimkevin@DroidNights2018: ~ public void setUser(User user) // 2w : move forward two words public void setUser(User user) // dw : delete forward word public void (User user) // u : undo public void setUser(User user) // db : delete backward word public setUser(User user)
  17. 17. kimkevin@DroidNights2018: ~ dd : delete a line [count]dd : delete [count] lines // ex) 4dd : delete 4 lines yy : copy a line [count]yy : copy [count] lines // ex) 4yy : copy 4 lines { : forward paragraph // ex) 2{ : forward 2 paragraphs } : backward paragraph // ex) 2} : forward 2 paragraphs
  18. 18. kimkevin@DroidNights2018: ~ 1. Basic Vim Shortcuts 2. Useful Mappings in .ideavimrc
  19. 19. kimkevin@DroidNights2018: ~ 1. Basic Vim Shortcuts 2. Useful Mappings in .ideavimrc vim을 사용하다 보면 기본키로 만족 못 할 때가 있다. 사용자 정의를 통해 단축키를 사 용하고 싶다면 .ideavimrc 파일을 생성해서 키맵을 추가하면 된다.
  20. 20. kimkevin@DroidNights2018: ~ The Most Used Action is ‘Run’ Ctrl + Shift + r or in my case, rr
  21. 21. kimkevin@DroidNights2018: ~ The Most Used Action is ‘Run’ Ctrl + Shift + r or in my case, rr Android Studio에서 가장 많이 사용하는 액션으로는 ‘Run’이다. 단축키로는 Ctrl + R 또는 마우스로 Run을 클릭하면 된다. 하지만 키맵을 사용하면 ‘rr’을 입력해서 Run을 할 수 있다.
  22. 22. kimkevin@DroidNights2018: ~ vi ~/.ideavimrc File for your specific Vim initialization commands
  23. 23. kimkevin@DroidNights2018: ~ vi ~/.ideavimrc File for your specific Vim initialization commands 홈 폴더에 .ideavimrc를 생성해서 키맵을 정의할 수 있다. IDE을 시작 또는 재시작하면 .ideavimrc 파일을 읽어서 명령어들을 초기화 해준다. 그리고 IDE의 Action(리팩토링, 깃, 디버 깅, 빌드 등) 또한 키맵을 추가해서 사용할 수 있다.
  24. 24. kimkevin@DroidNights2018: ~ ./refactoring_by_keymap DEMO
  25. 25. kimkevin@DroidNights2018: ~ .ideavimrc Keymap nnoremap <leader>rr :action Run<cr> nnoremap <leader>dd :action Debug<cr> nnoremap <leader>cc :action CleanGradleProject<cr> nnoremap <leader>ss :action Android.SyncProject<cr> nnoremap <leader>fu :action FindUsages<cr> nnoremap <leader>su :action ShowUsages<cr> nnoremap <leader>ga :action GotoAction<cr> nnoremap <leader>lc :action ActivateLogcatToolWindow<cr> nnoremap <leader>sh :action ActivateTerminalToolWindow<cr> nnoremap <leader>R :action Refactorings.QuickListPopupAction<cr> nnoremap <leader>rm :action ExtractMethod<cr> nnoremap <leader>rn :action RenameElement<cr> nnoremap <leader>rf :action RenameFile<cr> nnoremap <leader>rv :action IntroduceVariable<cr> nnoremap <leader>rs :action ExtractSuperclass<cr> nnoremap <leader>ri :action Inline<cr> https://github.com/kimkevin/dotfiles/blob/master/.ideavimrc
  26. 26. kimkevin@DroidNights2018: ~ .ideavimrc Keymap nnoremap <leader>rr :action Run<cr> nnoremap <leader>dd :action Debug<cr> nnoremap <leader>cc :action CleanGradleProject<cr> nnoremap <leader>ss :action Android.SyncProject<cr> nnoremap <leader>fu :action FindUsages<cr> nnoremap <leader>su :action ShowUsages<cr> nnoremap <leader>ga :action GotoAction<cr> nnoremap <leader>lc :action ActivateLogcatToolWindow<cr> nnoremap <leader>sh :action ActivateTerminalToolWindow<cr> nnoremap <leader>R :action Refactorings.QuickListPopupAction<cr> nnoremap <leader>rm :action ExtractMethod<cr> nnoremap <leader>rn :action RenameElement<cr> nnoremap <leader>rf :action RenameFile<cr> nnoremap <leader>rv :action IntroduceVariable<cr> nnoremap <leader>rs :action ExtractSuperclass<cr> nnoremap <leader>ri :action Inline<cr>
  27. 27. kimkevin@DroidNights2018: ~ .ideavimrc Keymap nnoremap <leader>rr :action Run<cr> nnoremap <leader>dd :action Debug<cr> nnoremap <leader>cc :action CleanGradleProject<cr> nnoremap <leader>ss :action Android.SyncProject<cr> nnoremap <leader>fu :action FindUsages<cr> nnoremap <leader>su :action ShowUsages<cr> nnoremap <leader>ga :action GotoAction<cr> nnoremap <leader>lc :action ActivateLogcatToolWindow<cr> nnoremap <leader>sh :action ActivateTerminalToolWindow<cr> nnoremap <leader>R :action Refactorings.QuickListPopupAction<cr> nnoremap <leader>rm :action ExtractMethod<cr> nnoremap <leader>rn :action RenameElement<cr> nnoremap <leader>rf :action RenameFile<cr> nnoremap <leader>rv :action IntroduceVariable<cr> nnoremap <leader>rs :action ExtractSuperclass<cr> nnoremap <leader>ri :action Inline<cr> Android Studio와 IntellJ 플랫폼에서 제공해주는 action이다. 키맵을 사용하는 이유는 단축키를 외우는 게 아니라 자신이 하고 싶은 행동을 줄여서 키맵을 설 정해 기억하기 쉽다. 예를 들어, 리팩토링을 하면서 중복되는 코드를 메소드 로 추출할 때, ‘Extract Method’를 사용하는데 Cmd + Opt + m 보다 ‘rm’ (refactoring method) 가 더 기억하기 쉬울 것이다.
  28. 28. kimkevin@DroidNights2018: ~ .ideavimrc Keymap nnoremap <leader>rr :action Run<cr> nnoremap <leader>dd :action Debug<cr> nnoremap <leader>cc :action CleanGradleProject<cr> nnoremap <leader>ss :action Android.SyncProject<cr> nnoremap <leader>fu :action FindUsages<cr> nnoremap <leader>su :action ShowUsages<cr> nnoremap <leader>ga :action GotoAction<cr> nnoremap <leader>lc :action ActivateLogcatToolWindow<cr> nnoremap <leader>sh :action ActivateTerminalToolWindow<cr> nnoremap <leader>R :action Refactorings.QuickListPopupAction<cr> nnoremap <leader>rm :action ExtractMethod<cr> nnoremap <leader>rn :action RenameElement<cr> nnoremap <leader>rf :action RenameFile<cr> nnoremap <leader>rv :action IntroduceVariable<cr> nnoremap <leader>rs :action ExtractSuperclass<cr> nnoremap <leader>ri :action Inline<cr>
  29. 29. kimkevin@DroidNights2018: ~ nnoremap <leader>rr :action Run<cr> n + nore + map normal mode + non-reculsive + map {cmd} {attr} {lhs} {rhs}
  30. 30. kimkevin@DroidNights2018: ~ nnoremap <leader>rr :action Run<cr> n + nore + map normal mode + non-reculsive + map {cmd} {attr} {lhs} {rhs} nnoremap 은 나누어 보면 Normal 모드에서 비재 귀적인 키맵을 의미한다. 여기에서 ‘non-reculsive’는 예를 들어, A를 눌렀을 때 B가 실행되고 (A -> B) B를 눌렀을 때 A가 실행되는 (B->A) 키맵 설정이 있다면 무한 루프에 빠질 수 있어서 이 를 방지하기 위해서다.
  31. 31. kimkevin@DroidNights2018: ~ nnoremap <leader>rr :action Run<cr> <leader> : (back slash) <space> : Space <C-A> : Ctrl + a <tab> : Tab {cmd} {attr} {lhs} {rhs}
  32. 32. kimkevin@DroidNights2018: ~ nnoremap <leader>rr :action Run<cr> // {lhs} : left hand side // {rhs} : right hand side :actionlist (Show all actions) ex) Run, RenameElement, FindUsages <cr> : carriage return {cmd} {attr} {lhs} {rhs}
  33. 33. kimkevin@DroidNights2018: ~ nnoremap <leader>rr :action Run<cr> // {lhs} : left hand side // {rhs} : right hand side :actionlist (Show all actions) ex) Run, RenameElement, FindUsages <cr> : carriage return {cmd} {attr} {lhs} {rhs}IDE에서 제공해주는 모든 action은 vim을 설치하고 ‘:actionlist’를 입력하면 모든 action들을 확인할 수 있다.
  34. 34. kimkevin@DroidNights2018: ~ $ Useful Customization IdeaVim
  35. 35. kimkevin@DroidNights2018: ~ $ Useful Customization IdeaVim 만약 키맵을 통해 해결할 수 없는 것이 있다 면 직접 ‘ideavim’을 커스터마이징해서 해 결할 수 있다.
  36. 36. kimkevin@DroidNights2018: ~ Write Codes
  37. 37. kimkevin@DroidNights2018: ~
  38. 38. kimkevin@DroidNights2018: ~ Search on Google
  39. 39. kimkevin@DroidNights2018: ~ Cmd + Tab
  40. 40. kimkevin@DroidNights2018: ~ Cmd + Tab Cmd + Tab Cmd + Tab Cmd + Tab
  41. 41. kimkevin@DroidNights2018: ~ Cmd + Tab Cmd + Tab Cmd + Tab Cmd + Tab Android Studio에서 코드를 작성 Cmd + Tab 터미널에서 adb로 기기를 wifi로 연결 Cmd + Tab 구글 검색을 하기 위해 Cmd + Tab 터미널에서 Git 명령어로 소스 관리 Cmd + Tab 계속해서 반복되는 ‘Cmd + Tab’ 줄이거나 할 수 있 는 방법이 없을까를 고민하게 되었다.
  42. 42. kimkevin@DroidNights2018: ~ The problem is So boring… What’s Wifi address?… and port… EVERYDAY EVERYTIME
  43. 43. kimkevin@DroidNights2018: ~ The problem is So boring… What’s Wifi address?… and port… EVERYDAY EVERYTIME Cmd + Tab의 사용을 줄여보자. Wifi 주소나 Port 등 무엇인가 기억해야 하고 반복해서 입력해야 하는 것이 지루하 다.
  44. 44. kimkevin@DroidNights2018: ~ https://brunch.co.kr/@travel-heather/147 Be lazy wisely!
  45. 45. kimkevin@DroidNights2018: ~ OPEN
  46. 46. kimkevin@DroidNights2018: ~ OPEN Android Studio에서 터미널에서 사용하는 명령어를 IDE안에서 실행하고, Error 로그를 복사했을 때, IDE에서 명령어를 입력하면 검색된 구글 페 이지가 크롬에 곧바로 실행되면 좋겠다고 생각했다.
  47. 47. kimkevin@DroidNights2018: ~ :
  48. 48. kimkevin@DroidNights2018: ~ :해결 하는데 도움을 준 것은 바로 ‘:’ 이다.
  49. 49. kimkevin@DroidNights2018: ~ 1. EX mode is which is invoked using the ex command. 2. This is for the Ex commands, 3. ”:", the pattern search 4. commands, "?" and "/", and the 5. filter command, "!". ~ ~ ~ ~ :%s/command/cmd/g
  50. 50. kimkevin@DroidNights2018: ~ 1. EX mode is which is invoked using the ex command. 2. This is for the Ex commands, 3. ”:", the pattern search 4. commands, "?" and "/", and the 5. filter command, "!". ~ ~ ~ ~ :%s/command/cmd/g ‘:’ 입력하면 EX 모드에서 EX 명령어를 실행할 수 있다.
  51. 51. kimkevin@DroidNights2018: ~ 1. EX mode is which is invoked using the ex cmd. 2. This is for the Ex cmds, 3. ”:", the pattern search 4. cmds, "?" and "/", and the 5. filter cmd, "!". ~ ~ ~ ~ ~
  52. 52. kimkevin@DroidNights2018: ~ !
  53. 53. kimkevin@DroidNights2018: ~ !‘:’ EX 모드에서 ‘!’를 입력하면 Shell 명령어를 실행할 수 있다.
  54. 54. kimkevin@DroidNights2018: ~ :! {command} EX mode Execute {command} with a shell
  55. 55. kimkevin@DroidNights2018: ~ :! {command} EX mode Execute {command} with a shell 만약, 디렉토리의 리스트를 확인할 때 사용하는 ‘:! ls’를 입력하면 IDE에서도 결과를 확인할 수 있다.
  56. 56. kimkevin@DroidNights2018: ~ :! adb tcpip 5555
  57. 57. kimkevin@DroidNights2018: ~ :! adb tcpip 5555 터미널에 하던 git, adb 명령어를 IDE의 vim를 사용해 외부 명령어로 실행할 수 있다.
  58. 58. kimkevin@DroidNights2018: ~
  59. 59. kimkevin@DroidNights2018: ~ VIM: Cannot run program “adb”:error=2
  60. 60. kimkevin@DroidNights2018: ~ VIM: Cannot run program “adb”:error=2 터미널에서는 ‘:! <command>’가 잘 실행 되지만 IDE에서는 동작하지 않았다.
  61. 61. kimkevin@DroidNights2018: ~ WHAT?
  62. 62. kimkevin@DroidNights2018: ~ Make adb run in ideavim
  63. 63. kimkevin@DroidNights2018: ~ : adb tcpip 5555 EX command
  64. 64. kimkevin@DroidNights2018: ~ : adb tcpip 5555 EX command ‘!’로 외부 명령어로 실행하는 대신에 EX 명령어를 만들어 보기로 했다.
  65. 65. kimkevin@DroidNights2018: ~ What should I do first? https://github.com/JetBrains/ideavim
  66. 66. kimkevin@DroidNights2018: ~ What should I do first? https://github.com/JetBrains/ideavim JetBrains의 ideavim를 fork 해서 README.md에 나와 있는대로, IntellJ로 실행해보았다.
  67. 67. kimkevin@DroidNights2018: ~ https://github.com/kimkevin/ideavim-as
  68. 68. kimkevin@DroidNights2018: ~ https://github.com/kimkevin/ideavim-as Android Studio에서 사용할 수 있는 EX 명 령어를 추가해서 ideavim-as 프로젝트를 생성했다. Git 명령어를 실행할 수 있는 부분은 별도로 ideavim 프로젝트에 PR을 넣을 예정이다.
  69. 69. kimkevin@DroidNights2018: ~ https://github.com/kimkevin/ideavim-as git git commands adb adb start <device_ip_address> adb start : Once it's connected, IP address will be existed. Google Search gg <query_string> gg : If clipboard has a string Supported:
  70. 70. kimkevin@DroidNights2018: ~ https://github.com/kimkevin/ideavim-as git git commands adb adb start <device_ip_address> adb start : Once it's connected, IP address will be existed. Google Search gg <query_string> gg : If clipboard has a string Supported:adb의 경우 한번 Wifi 주소를 입력하고 나면 캐 싱이 되기 때문에 ‘:adb start’를 통해 곧바로 디바이스와 연결할 수 있다. 구글 검색을 위해서 Cmd + Tab으로 브라우저 이동 없이 클립보드에 복사된 내용이 있으면 ‘:gg’ 명령어를 통해 자동으로 브라우저가 실행 되고 검색된 결과를 한번에 확인할 수 있다.
  71. 71. kimkevin@DroidNights2018: ~ DEMO ./additional_ex_commands
  72. 72. kimkevin@DroidNights2018: ~ How it works?
  73. 73. kimkevin@DroidNights2018: ~ https://github.com/kimkevin/ideavim-as git git commands adb adb start <device_ip_address> adb start : Once it's connected, IP address will be existed. Google Search gg <query_string> gg : If clipboard has a string Supported:
  74. 74. kimkevin@DroidNights2018: ~ DataContext - Data Object by Identifier ExCommand - Command - Arguments Editor - Project (path, document) - EditorColorsScheme - EditorSettings
  75. 75. kimkevin@DroidNights2018: ~ DataContext - Data Object by Identifier ExCommand - Command - Arguments Editor - Project (path, document) - EditorColorsScheme - EditorSettings 하나 더 기능을 추가한다면 ‘:morning’을 입력하면 IDE의 테마를 밝은 것으로 ‘:night’을 입력하면 IDE의 테마를 어두운 것으로 변경해보는 Handler를 만들어 볼 예정이다. ‘execute’ 함수의 파라미터로 ‘Editor’ 클래스에서 제공해주는 API가 많고 다양하며, EditorColorsSchemes에도 접근이 가능하다.
  76. 76. kimkevin@DroidNights2018: ~ 1. Create EX command Handler and Register CommandParser 2. Set command and flags on super class 3. Write codes in execute() 4. Run and Test
  77. 77. kimkevin@DroidNights2018: ~ $ What I learned
  78. 78. kimkevin@DroidNights2018: ~ 1. Fun to make something suitable for your taste 2. 3.
  79. 79. kimkevin@DroidNights2018: ~ 1. Fun to make something suitable for your taste 2. Pair Programming 3.
  80. 80. kimkevin@DroidNights2018: ~ Pair Programming - Disabled Vim Emulator
  81. 81. kimkevin@DroidNights2018: ~ 1. Fun to make something suitable for your taste 2. Pair Programming 3. Learning Curve
  82. 82. kimkevin@DroidNights2018: ~ https://pascalprecht.github.io/2014/03/18/why-i-use-vim Vim Learning Curve
  83. 83. kimkevin@DroidNights2018: ~ https://pascalprecht.github.io/2014/03/18/why-i-use-vim Vim Learning Curve Vim은 조금씩 실력이 향상되기 보다는 큰 산을 넘어야 비로소 익숙해질 수 있는 도 구다.
  84. 84. kimkevin@DroidNights2018: ~ https://pascalprecht.github.io/2014/03/18/why-i-use-vim Normally
  85. 85. kimkevin@DroidNights2018: ~ https://pascalprecht.github.io/2014/03/18/why-i-use-vim Normally 많은 사람들이 시도 하지만, 실패하고 ideavim을 삭제한다. 그것은 남들처럼 보통 처럼 하기 때문이다.
  86. 86. kimkevin@DroidNights2018: ~ Make you lazy!
  87. 87. kimkevin@DroidNights2018: ~ Make you lazy! vim을 끄고 싶을 때, 생각한 것은 ‘내가 더 게을러 지는 것이다.’ 누구나 오른손에 있는 마우스가 편하기 때문에 습관을 버리기가 어렵다. 이를 위해, 마우스를 왼쪽으로 옮겨 마우스 사용이 더 불편한 상황을 만들어 보 자.
  88. 88. kimkevin@DroidNights2018: ~ : wq! thankYou() ~ ~ ~ ~ ~ ~

×