Vim Mode for Playground, System Browser, Debugger in Pharo.
# Smalltalk Vim Mode
Vim Mode for Playground, System Browser, Debugger in Pharo.
# Install SmalltalkVimMode
## Prerequisites
- Latest Pharo 6.1 image.
- Pharo VM for Pharo 6.1.
**(It doesn't work in the latest Pharo. I have tried to fix it, but my Smalltalk skill is rusty, I have no idea what went wrong.)**
## Execute the code in a Playground in Pharo
```
baseline := 'SmalltalkVimMode'.
repository := 'github://unchartedworks/SmalltalkVimMode:master'.
metacello := [ Metacello new baseline: baseline; repository: repository ].
get := [ metacello value get ].
load := [ metacello value onConflict: [:ex | ex allow]; load ].
actions := {get . load}.
apply := [ :action | action value ].
actions do: apply.
```
# Shortcuts
## Main
`Esc` enter normal mode
`i` enter insert mode
`V` enter visual mode per line
## Normal mode
### Comment/Uncomment
`Command + /` comment/uncomment selected code, if there is no selection, the current line will be commented/uncommented.
### Navigation keys
`h` left
N `h` left N times
`j` down
N `j` down N times
`k` up
N `k` up N times
`l` right
N `l` right N times
`0` move the cursor to the first character in the line
`$` move the cursor to the last character in the line
`^` move the cursor to the first non-blank character in the line
`g_` move the cursor to the last non-blank character in the line
`w` move forward to the start of the next word (next alphanumeric word)
N `w` move forward to the start of the next N words (next N alphanumeric words)
`W` move forward to the start of the next word (delimited by a white space)
N `W` move forward to the start of the next N words (delimited by a white space)
`e` move forward to the end of the next word (next alphanumeric word)
N `e` move forward to the end of the next N words (next N alphanumeric words)
`E` move forward to the end of the next word (delimited by a white space)
N `E` move forward to the end of the next N words (delimited by a white space)
`b` move backward to the start of previous word (previous alphanumeric word)
N `b` move backward to the start of previous N words (previous N alphanumeric words)
`B` move backward to teh start of previous word (delimited by a white space)
N `B` move backward to teh start of previous N words (delimited by a white space)
`gg` move to the beginning of the buffer
`G` move to the end of the buffer
`fx` move forward to the next occurrence of character x to the right
N `fx` move forward to the Nth occurrence of character x to the right
`tx` move forward to before the next occurrence of character x to the rigtht
N `tx` move forward to before the Nth occurrence of character x to the right
`Fx` move forward to the Nth occurrence of character x to the left
N `Fx` move forward to the Nth occurrence of character x to the left
`Tx` move forward to after the previous occurrence of character x to the left
N `Tx` move forward to after the Nth occurrence of character x to the left
### Insert text
`a` insert text after the cursor
`A` insert text at the end of the line
`i` insert text before the cursor
`o` begin a new line below the cursor
`O` begin a new line above the cursor
### Delete text
`x` delete character at the cursor
N `x` delete N characters from the cursor
`dw` delete a word.
N `dw` delete N words.
`d0` delete to the beginning of a line.
`d$` delete to the end of a line.
`dgg` delete to the beginning of the file.
`dG` delete to the end of the file.
`dd` delete line
N `dd` delete N lines
### Simple replace text
`r` peplace the character under the cursor
`R` replace characters instead of inserting them
### Copy/Paste text
`yy` copy current line into storage buffer
`p` paste storage buffer after current line
N `p` paste N times storage buffer after current line
### Undo/Redo operation
`u` undo the last operation
N `u` undo the last N operations
`Ctrl + r`redo the last undo operation
N `Ctrl + r`redo the last N undo operations