yi-0.8.0: example-configs/yi-vim-snippets.hs
module Main where
import Control.Applicative ((<|>))
import Control.Lens.Getter (use)
import Yi
import Yi.Keymap
import Yi.Keymap.Vim
import Yi.Snippets
main :: IO ()
main = yi $ defaultVimConfig {
defaultKm = myVimKeymap
-- install update handler for dependent snippet regions
, bufferUpdateHandler = [updateUpdatedMarks]
}
deleteSnippets = False
myVimKeymap =
mkKeymap $ defKeymap `override` \super self -> super {
v_ins_char = (v_ins_char super ||> tabKeymap)
<|> (ctrlCh 's' ?>>! moveToNextBufferMark deleteSnippets)
, v_ex_cmds = myExCmds
}
myExCmds = exCmds [ ("sd", const $ withEditor showDepMarks, Nothing) ]
showDepMarks = withBuffer0 (use bufferDynamicValueA >>=
mapM markRegion . concat . marks) >>=
printMsg . show
tabKeymap = superTab True $ fromSnippets deleteSnippets $
[ ("test", testSnippet)
, ("hc", haskellComment)
, ("ts2", testSnippet2)
, ("ts3", testSnippet3)
, ("ts4", testSnippet4)
]
haskellComment :: SnippetCmd ()
haskellComment = snippet $
"{-" & (cursor 1) & "\n-}"
testSnippet :: SnippetCmd ()
testSnippet = snippet $
"if ( " & (cursorWith 1 "...") & " ) {\n" &
"\t" & (cursorWith 2 "/* code */") &
"\n}\n" & (cursor 3)
testSnippet2 :: SnippetCmd ()
testSnippet2 = snippet $
(cursorWith 2 "abcdef") & "\n" &
(dep 2) & "\ndef" &
(cursor 1)
testSnippet3 :: SnippetCmd ()
testSnippet3 = snippet $
"for(int " & (cursorWith 2 "ab") & " = 0; " &
(dep 2) & " < " & (cursorWith 1 "arr") & ".length;" &
(dep 2) & "++) {\n" &
"\t" & (cursorWith 3 "/* code */") &
"\n}\n" & (cursor 4)
testSnippet4 :: SnippetCmd ()
testSnippet4 = snippet $
"for(int " & (cursorWith 1 "ab") & " = 0; " &
(dep 1) & " < " & (cursorWith 2 "arr") & ".length;" &
(dep 1) & "++) {\n" &
"\t" & (cursorWith 3 "/* code */") &
"\n}\n" & (cursor 4)