Repository für den Vim Workshop in der O-Phase 2019
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

235 lines
9.0 KiB

6 years ago
6 years ago
6 years ago
  1. # Vim Workshop
  2. ## Eine kleine Einführung in den Editor Vim
  3. In diesem Repo befindet sich zum einen die Präsentation, zum anderen auch eine
  4. Beispiel-Configdatei, die ihr für den Anfang nutzen könnt.
  5. Diese Config setzt [Neovim](https://neovim.io/) voraus.
  6. Außerdem setze ich Linux vorraus, ich selbst arbeite mit Ubuntu und habe die
  7. folgenden Sachen damit getestet. Unter Mac funktioniert vermutlich auch einiges,
  8. Windows kann ich allerdings überhaupt nicht empfehlen.
  9. ## Hilfreiche Links und Infos
  10. - [Alles wichtige in einem Bild](https://www.reddit.com/r/vim/comments/32r85c/this_is_my_favorite_vim_cheat_sheet_does_anyone/) (Vermutlich das Beste Cheatsheet)
  11. - [Vim Cheat Sheet Website](https://vim.rtorr.com/)
  12. - [vimawesome.com](https://vimawesome.com/) (Auflistung vieler hilfreicher Plugins)
  13. ## Abhängigkeiten
  14. Damit alle Plugins korrekt funktionieren, müssen noch weitere Voraussetzungen
  15. erfüllt sein.
  16. ### Python
  17. Python muss installiert sein (Auf den Rechnern im CIP-Pool der Fall).
  18. Darüber hinaus muss die Python-Erweiterung für Neovim per pip installiert
  19. werden.
  20. Auf euren eigenen Rechnern muss vermutlich vorher noch pip installiert werden.
  21. Dafür kann unter Ubuntu folgendes Kommando ausgeführt werden:
  22. ```bash
  23. sudo apt install python-pip python3-pip
  24. ```
  25. ```bash
  26. pip install neovim
  27. pip3 install neovim
  28. ```
  29. ## Installation
  30. Neovim erwartet die Datei im Verzeichnis `~/.config/nvim/`.
  31. Folgendes Kommando lädt die Datei herunter und platziert sie im entsprechenden
  32. Verzeichnis.
  33. ```bash
  34. curl --create-dirs -o ~/.config/nvim/init.vim https://git.schneider-hosting.de/uni/vim-workshop/raw/branch/master/init.vim
  35. ```
  36. Nun kann Neovim per `nvim` gestartet werden und per `:PlugInstall` werden die
  37. Plugins installiert. Nach einem Neustart von nvim sind alle Plugins geladen und
  38. einsatzbereit
  39. ## Enthaltene Plugins
  40. Mit der Config werden einige hilfreiche Plugins mitgeliefert. Schaut euch auf
  41. jeden Fall jedes einmal genauer an.
  42. ### [vim-plug](https://github.com/junegunn/vim-plug)
  43. Packagemanager für Vim.
  44. Neue Plugins können über einen Eintrag in der init.vim installiert werden.
  45. Schaut euch die Syntax bei den vorhandenen Beispielen an.
  46. Nachdem ihr einen Eintrag der Form `Plug 'url/repo' eingetragen und gespeichert habt, startet nvim neu, führt`:PlugInstall` aus und startet nvim nochmal neu.
  47. Dann sind die Plugins einsatzbereit.
  48. ### [NERD Commenter](https://github.com/scrooloose/nerdcommenter)
  49. Bietet die passende Kommentarsynntax für diverse Sprachen.
  50. Im Normal Mode kann per `<leader> c <space>` ein Kommentar erzeugt, oder
  51. entfernt werden.
  52. ### [surround.vim](https://github.com/tpope/vim-surround)
  53. Verbessertes Arbeiten mit umschließenden Zeichen/Klammern.
  54. Mit diesem Plugin können z.B Klammern geändert werden. Aus `"Hallo, Welt!"` wird
  55. `'Hallo, Welt!'`, indem innerhalb der Anführungszeichen das Kommando `cs"'`
  56. ausgeführt wird.
  57. Guckt in der Readme, es gibt Unterstützung für eine Vielzahl von Zeichen und
  58. Sprachen, zum Beispiel auch HTML und LaTeX.
  59. ### [fugitive.vim](https://github.com/tpope/vim-fugitive)
  60. Git-Integration.
  61. Per `:Gstatus` die geänderten Dateien anzeigen lassen. `<Ctrl> n` lässt den
  62. Cursor zur nächsten Datei springen. Mit `-` wird die Datei zum Commit
  63. hinzugefügt, per `cc` die Commit-Message geöffnet. Wenn der Buffer gespeichert
  64. wird, wird der Commit ausgeführt.
  65. Gerade in Projekten mit mehereren Entwicklern ist [git blame](https://www.git-scm.com/docs/git-blame) immer wieder hilfreich.
  66. Per `:Gblame` wird ein Fenster auf der linken Seite geöffnet, welches für jede
  67. Zeile den letzten Bearbeiter und den dazugehörigen Commit zeigt.
  68. ### [coc.nvim](https://github.com/neoclide/coc.nvim)
  69. Codevervollständigung per Languageserver.
  70. Ein Code-Editor ohne vernünftige Vervollständigung ist kaum sinnvoll nutzbar.
  71. Seit kurzem habe ich dafür coc.nvim entdeckt, welches mit dem Language Server
  72. Protocol (vielleicht schon aus arbeitet, und somit vorhandene Vervollständigungen für die jeweiligen
  73. Sprachen nutzen kann.
  74. Auf der Website findet sich eine Liste mit unterstützten Sprachen und
  75. lsp-servern.
  76. Diese sind als Plugins für coc.nvim realisiert und werden mit dem Kommando
  77. `CocInstall coc-php` installiert.
  78. Dieses Plugin bietet noch weitere Features, zum Beispiel snippets per
  79. [coc-snippets](https://github.com/neoclide/coc-snippets). Dies kann per
  80. `CocInstall coc-snippets` installiert werden.
  81. ### [easymotion](https://github.com/easymotion/vim-easymotion)
  82. Noch schnellere Motions.
  83. Einfach vor die normale Motion (z.B. `w`) zweimal `<leader>` drücken, also z.B.
  84. `<leader><leader>w`. Danach werden die nachfolgenden Worte mit Buchstaben
  85. markiert. Mit diesen Buchstaben kann sofort zu dem jeweiligen Wort gesprungen
  86. werden.
  87. ### [fzf](https://github.com/junegunn/fzf)
  88. Extrem hilfreicher fuzzy file finder, auch auf der Kommandozeile.
  89. Dieses Plugin installiert fzf, nicht nur in Vim. Proviert mal auf der
  90. Kommandozeile `<ctrl> t` aus. Oder `nvim ~/.config/nvi**` und drückt dann
  91. `<TAB>`. Es werden alle gefundenen Dateien angezeigt. Per `<ENTER>` übernehmt
  92. ihr den Vorschlag in die Kommandozeile. Setzt euch auf jeden Fall mit dem
  93. Programm auseinander, es kann die Produktivität ungemein steigern.
  94. In nvim bietet es per `<ctrl> p` die Dateisuche.
  95. ### [Asynchronous Lint Engine](https://github.com/w0rp/ale)
  96. Lintengine für diverse Linter und Sprachen
  97. ## Weitere Plugins
  98. Für fast jede Sprache und jeden Anwendungszweck gibt es reichlich Plugins,
  99. welche Codevervollständigung, erweitertes Syntaxhighlighting oder andere
  100. Funktionalitäten anbietet. Sucht einfach und lest euch in die Plugins ein.
  101. Vundle bietet die Funktion, dass Plugins nur für bestimmte Dateitypen geladen
  102. werden. JavaScript-Plugins müssen zum Beispiel nur bei JavaScript-Dateien
  103. geladen werden.
  104. Guckt dazu auch mal in meine [produktive init.vim](https://git.schneider-hosting.de/schneider/dotfiles/src/branch/master/init.vim#L42)
  105. ## Ausblick
  106. Sobald ihr die Movements verinnerlicht habt, wollt ihr sie auch in anderen
  107. Programmen anwenden.
  108. ### Firefox
  109. Mit dem Plugin
  110. [Vimium-FF](https://addons.mozilla.org/en-US/firefox/addon/vimium-ff/) braucht
  111. man selbst im Browser kaum noch die Maus. Mit `f` kann man Links auswählen, `gi`
  112. legt den Fokus auf das erste Inputfield, `O` öffnet einen neuen Tab mit Suche.
  113. ### Kommandozeile (bash/zsh)
  114. Auch auf der Kommandozeile kann man die Vim-Keybindings nutzen:
  115. Für bash in die `.bashrc` einfügen:
  116. ```bash
  117. set -o vi
  118. ```
  119. Für zsh in die `.zshrc` eintragen:
  120. ```bash
  121. bindkey -v
  122. ```
  123. ### Vimgolf
  124. Ihr habt sicherlich gesehen: Es geht bei Vim im Wesentlichen darum, mit
  125. möglichst wenig Tastendrücken möglichst viel zu erreichen.
  126. [Vimgolf](https://www.vimgolf.com/) ist ein Spiel, welches das auf die Spitze
  127. treibt. Dort gibt es Challenges, die es mit möglichst wenig Tastendrücken zu
  128. bewältigen gilt.
  129. Guckt da mal rein, dadurch lernt man noch einmal ganz neue Seiten von Vim
  130. kennen.
  131. ### Andere Programme
  132. Auch viele andere Programme bieten Vim-Bindings an. Sei es eine komplette
  133. Emulation per Add-On, oder simple Bewegungen per `hjkl`.
  134. So kann beispielsweise eine mächtige IDE wie IntelliJ IDEA mit den gewohnten
  135. Tastaturbewegungen benutzt werden. Gerade für umfangreichere Java-Projekte
  136. (spätestens im APP) bietet sich IntelliJ IDEA mit dem Plugin
  137. [IdeaVim](https://plugins.jetbrains.com/plugin/164-ideavim) an.
  138. ## Arbeiten auf der Kommandozeile/in der Shell
  139. Ihr werdet merken, dass ihr mit der Zeit immer mehr direkt im Terminal arbeiten
  140. werdet, nicht zuletzt weil es meist effizienter und schneller geht.
  141. Auch dafür habe ich mir viel eingerichtet um es einfacher zu machen.
  142. Ganz besonders möchte ich euch [tmux](https://github.com/tmux/tmux/wiki)
  143. ans Herz legen. Damit könnt ihr mehrere virtuelle Terminals in einem "echten"
  144. Terminal öffnen.
  145. Guckt euch ruhig mal den Tal von [Nick Nisi - vim +
  146. tmux](https://www.youtube.com/watch?v=5r6yzFEXajQ) an. In diesem seht ihr auch
  147. nocheinmal viele coole Features von Vim.
  148. Abschließend kann ich noch [zsh](http://www.zsh.org/) als Shell statt bash
  149. empfehlen. Zusammen mit [oh-my-zsh](https://github.com/robbyrussell/oh-my-zsh)
  150. habt ihr eine Vielzahl von coolen Features, die einem insgesamt das Leben auf
  151. der Kommandozeile deutlich vereinfachen.
  152. Guckt auch ruhig mal in meine
  153. [dotfiles](https://git.schneider-hosting.de/schneider/dotfiles), dort findet ihr
  154. meine gesamte Konfiguration und könnt euch das ein oder andere abschauen.
  155. Bei weiteren Fragen könnt ihr mich gerne Kontaktieren, E-Mail-Adresse findet ihr
  156. in der Präsentation.
  157. Viel Spaß!
  158. ## VIM-Modi in anderen Editoren
  159. Es gibt für viele bekannte Editoren und IDEs Plugins um die Eingabemodi und
  160. Tastenkombinationen von vim zu emulieren.
  161. Wenn ihr bereits viel Erfahrung mit einem Editor oder einer IDE habt, kann solch
  162. ein Plugin sehr hilfreich für den Anfang sein. So könnt ihr euch mit den
  163. Eingabewegen von vim vertraut machen, habt aber nach wie vor die bekannte
  164. Umgebung.
  165. Für den Anfang kann das ein sehr guter Mittelweg sein, wenn Ihr dann irgendwann
  166. Lust habt komplett umzusteigen könnt ihr das natürlich immer noch machen.
  167. Oder Ihr bleibt weiterhin bei eurem Editor/IDE, das Wichtigste ist, dass ihr
  168. produktiv sein könnt.