$30 off During Our Annual Pro Sale. View Details »


December 08, 2013


Vim, maybe the final text editor you need to learn :)


December 08, 2013

More Decks by 高見龍

Other Decks in Technology


  1. Vim the final text editor you need to learn !

  2. None
  3. Current Status 80% iOS app, 20% Ruby/Rails

  4. Scenario

  5. I'm looking for a text editor..

  6. 1. launch quickly 2. easy to navigate between files 3.

    and pretty syntax highlight
  7. Vim

  8. Vim = Vi iMproved

  9. Free and Charity

  10. What's Vim?

  11. it may look a little old-fashioned

  12. but it can also be modern : )

  13. So, Why Vim?

  14. Keyboard-driven

  15. Keyboard is King!

  16. and, Why not Vim?

  17. seems very hard to learn..

  18. you won’t use other editors after learning Vim..

  19. Today, we have 2 Goals..

  20. no Mouse

  21. no Arrow keys

  22. muscle memory

  23. Tips

  24. in terminal: 1. ctrl + z to stash vim, and

    type fg to bring it back. 2. ctrl + w to delete a word, ctrl + u to delete a whole line, both work in terminal and vim edit mode. 3. ctrl + r to find history commands fuzzily.
  25. How to Vim?

  26. Practice: Install Vim in your machine. http://www.vim.org/download.php

  27. :help

  28. Modes normal, visual, and edit mode

  29. Modes Switch: 1. in normal mode, i or a or

    o to enter edit mode(i = insert, a = append, o = newline) 2. in edit mode, ESC or Ctrl+[ to enter normal mode 3. in normal mode, hit v or V to enter visual mode 4. in visual mode, hit ESC or Ctrl+[ to normal mode
  30. ESC or Ctrl + [

  31. None
  32. Practice: launch Vim and switch between normal, visual, and edit

  33. Movement :h movement

  34. move cursor with h, j, k and l disable arrow

    keys if possible
  35. photo by Kent-Chen

  36. Practice: Use h, j, k, l instead of using arrow

  37. http://vim-adventures.com/

  38. ✓w or W to move cursor forward by a word,

    and b or B is backward. ✓0 (number zero) to back to the begin of the line, and $ is jump to the end. ✓fx will stop the cursor at the next "x" character in current line, and F is search backward.
  39. ✓} will move cursor to next section, { move to

    last section. ✓gg will move the cursor to the top of the current file, and G will jump to bottom.
  40. Practice: Use word jumpers (b, w, fx..etc) to move cursor

    between words and lines.
  41. ✓zz, zb, zt ✓/ search, n can jump to next

    matched result, and N will jump to last one. ✓* search the word on cursor.
  42. Practice: search some keywords in your document.

  43. Visual Selection

  44. ✓vit will visually select content between the tag, while vat

    will even including the tag. ✓vi" will visually select content between current double quotes. ✓viw will select the current word. ✓ctrl+v to enter block selection mode.
  45. Basic

  46. ✓:w write to file. ✓:q exit Vim. ✓:tabe create a

    new tab. ✓gt to switch to next tab, gT to previous tab. (I map gt and gT to F7 and F8 in my vimrc) ✓:new to create a horizontal split window, :vnew or :vs to create a vertical split window.
  47. ✓vi -o a.rb b.rb to open those two files at

    the same time with horizontal split window. ✓vi -O a.rb b.rb same as above, but in vertical split window. ✓vi -p a.rb b.rb to open files with tabs. ✓vi http://www.eddie.com.tw will read the source content into vim directly.
  48. Practice: 1. quit Vim, and launch Vim, quite Vim, and

    launch Vim .. x N 2. open a file with Vim, exit, then open it again, then exit .. x N
  49. Buffers :ls, :bd, :b3, :b filename, :tab ba

  50. Practice: try to open several files, and switch between them

    with buffer commands.
  51. Vim Text Objects

  52. d 3 w = delete 3 words

  53. Word: 1. aw - around word 2. iw - inner

  54. Practice: 1. select a word, deselect, and select another word,

    and deselect.. x N ! 2. select a word, delete it, select another word, and delete.. X N
  55. Sentence: 1. as - a sentence 2. is - inner

  56. Practice: 1. select a sentence, deselect, and select another sentence,

    and deselect.. x N ! 2. select a sentence, delete it, select another sentence, and delete.. X N
  57. Paragraph: 1. ap - a paragraph 2. ip - inner

  58. Practice: 1. select a paragraph, deselect, and select another paragraph,

    and deselect.. x N ! 2. select a paragraph, delete it, select another paragraph, and delete.. X N
  59. Folding :h folds

  60. Basic: - zf to fold selected lines - zd to

    un-fold selected lines
  61. Practice: fold several lines, and unfold them .. x N

  62. Editing

  63. ✓D to clear all content of current line after the

    cursor. ✓C like D, but enter insert mode. dG will clear all content after the cursor, dgg will clear all content before the cursor. ✓x remove a character. ✓. to repeat last action. ✓dd to delete whole line, 3dd to delete 3 lines. ✓u to undo, ctrl+r to redo.
  64. Practice!

  65. ✓~ to toggle upper case and lower case. ✓:m+ to

    move current line to next line. ✓:m-2 to move current line to previous line. ✓>> to add indentation. ✓<< to reduce indentation. ✓= re-format, gg=G re-format whole file.
  66. Practice!

  67. ✓yy yank the whole line of the cursor. ✓3yy yank

    3 lines. ✓p paste content from register, 3p paster content from register for 3 times.
  68. Practice!

  69. ✓dw, diw to delete the word in the cursor. ✓cw,

    ciw same as above, but enter insert mode. ✓r to replace current character. ✓J to concatenate current line with next line, 3J will concatenate next 3 lines. ✓> to add indentation, < to remove indentation.
  70. .vimrc

  71. ✓ set history=1000 keep 1000 lines of command line history.

    ✓ set undolevels=100 ✓ set ruler show the cursor position all the time ✓ set autoread auto read when file is changed from outside ✓ set cursorline ✓ set number ✓ set numberwidth=4
  72. ✓ set nobomb no BOM(Byte Order Mark) ✓ set clipboard+=unnamed

    ✓ set splitright always open vertical split window in the right side. ✓ set splitbelow always open horizontal split window below. ✓ set scrolloff=5 start scrolling when n lines away from margins ✓ set showtabline=2 always show tab
  73. ✓ set synmaxcol=128 ✓ set viminfo= disable .viminfo file ✓

    filetype on enable filetype detection ✓ filetype indent on enable filetype-specific indenting ✓ filetype plugin on enable filetype-specific plugins ✓ syntax on syntax highlight ✓ set hlsearch search highlighting ✓ set incsearch incremental search ✓ set ignorecase ignore case when searching
  74. ✓ set nobackup no *~ backup files ✓ set noswapfile

    ✓ set nowritebackup ✓ set expandtab replace <TAB> with spaces ✓ set softtabstop=2 ✓ set shiftwidth=2 ✓ set tabstop=2
  75. to disable sound on errors… ✓ set visualbell ✓ set

    noerrorbells ✓ set t_vb= ✓ set tm=500
  76. file encoding… ✓ set encoding=utf-8 ✓ scriptencoding utf-8

  77. ignore something… ✓ set wildignore+=* .o,* .obj,* .pyc ✓ set

    wildignore+=* .png,* .jpg,* .gif,* .ico ✓ set wildignore+=* .swf,* .fla ✓ set wildignore+=* .mp3,* .mp4,* .avi,* .mkv
  78. remove tailing whitespace… ✓ autocmd BufWritePre * :%s/\s\+$//e

  79. key re-map… ✓ map <Leader><Leader> <Leader>c<space> comment ✓ noremap <F7>

    gT to previous tab ✓ noremap <F8> gt to next tab ✓ nmap <TAB> v> tab to add indentation ✓ nmap <S-TAB> v< shift-tab to reduce indentation ✓ vmap <TAB> >gv ✓ vmap <S-TAB> <gv !
  80. key re-map… ✓ map 0 ^ ✓ nmap <leader>v :tabe

    $MYVIMRC<CR> ✓ map <leader>0 :topleft 100 :split README.md<CR>
  81. Plugins

  82. https://github.com/kaochenlong/eddie-vim

  83. if you want to use my .vimrc 1. clone from

    my Github repo 2. cd to cloned repo and execute install script 3. make symbolic link for vim 4. done!
  84. or if you trust me… 1. via curl: sh <(curl

    -L https://github.com/kaochenlong/eddie-vim/raw/master/utils/install.sh) ! 2. via wget: sh <(wget --no-check-certificate https://github.com/kaochenlong/eddie-vim/raw/master/utils/install.sh -O -)
  85. Pathogen nice plugin manager https://github.com/tpope/vim-pathogen

  86. NERDTree A tree explorer https://github.com/scrooloose/nerdtree

  87. SnipMate code snippets plugin, inspired by TextMate https://github.com/msanders/snipmate.vim

  88. ctrlp Fuzzy file, buffer, mru, tag, etc finder https://github.com/kien/ctrlp.vim

  89. surround.vim quoting/parenthesizing made simple https://github.com/tpope/vim-surround

  90. vim-multiple-cursors Sublime Text style multiple selections for Vim https://github.com/terryma/vim-multiple-cursors

  91. powerline the ultimate vim statusline utility https://github.com/Lokaltog/vim-powerline

  92. rails.vim Ruby on Rails power tools https://github.com/tpope/vim-rails

  93. fugitive a git wrapper for vim https://github.com/tpope/vim-fugitive

  94. vimwiki personal wiki for vim https://github.com/vim-scripts/vimwiki

  95. ragtag https://github.com/tpope/vim-ragtag

  96. Practicing!

  97. References

  98. http://blog.eddie.com.tw/screencasts/

  99. and more practice.. : )