рдореЗрд░реЗ рд╕реЗ рдмрд┐рд▓реНрдХреБрд▓ рдХреЛрдИ рдЕрдиреБрд╡рд╛рджрдХ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдирд╣реАрдВ рдкрд╛ рд╕рдХрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реАрддрд▓рддрд╛ рдХреА рддрд░рдВрдЧреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдореЗрдВ рдЬрд╝реЗрди рдХреА рдПрдХрд╛рдЧреНрд░рддрд╛ рд▓реБрдврд╝рдХ рдЬрд╛рддреА рд╣реИред рдЗрд╕рд▓рд┐рдП рд╕реНрд╡рд╛рдЧрдд рд╣реИредрдкрд░рд┐рдЪрдп
рдореИрдВрдиреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдЧреЗрдо рдХреА рдЦреЛрдЬ рдХреА рдЬрд┐рд╕рдХрд╛ рдирд╛рдо рд╣реИ
рд╡рд┐рдордЧрд▓реНрдл ред рдЗрд╕ рдЧреЗрдо рдХрд╛ рд▓рдХреНрд╖реНрдп рдЯреЗрдХреНрд╕реНрдЯ рдХреЗ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рдПрдХ рд░реВрдк рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдХрд┐рд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреА рд╕рдмрд╕реЗ рдЫреЛрдЯреА рд╕рдВрднрд╡ рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реИред рдЬрдм рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдкрд╣реЗрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЗрд╕ рд╕рд╛рдЗрдЯ рдкрд░ рдЦреЗрд▓ рд░рд╣рд╛ рдерд╛, рдореИрдВ рдЙрддреНрд╕реБрдХ рдерд╛ - рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рдХрд┐рд╕ рддрд░рд╣ рдХреА рдкрд╛рда рд╕рдВрдкрд╛рджрди рдХреА рдЖрджрддреЗрдВ рд╣реИрдВ? рдореИрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рд╡рд┐рдо рдореЗрдВ рдкрд╛рда рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХреИрд╕реЗ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рдореИрдВ рдЕрдкрдиреЗ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдореЗрдВ рдЕрдХреНрд╖рдо рдХреНрд╖рдг рдкрд╛ рд╕рдХрддрд╛ рд╣реВрдВред рдореИрдВ рдЕрдкрдиреЗ рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рдордп рдмрд┐рддрд╛рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдорд╛рдореВрд▓реА рдЕрдирд┐рдпрдорд┐рддрддрд╛рдУрдВ рдХреЛ рднреА рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рд╕реЗ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдЙрд▓реНрд▓реЗрдЦрдиреАрдп рд╡реГрджреНрдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдБрдЧрд╛ рдФрд░ рдХреИрд╕реЗ рдореИрдВрдиреЗ рд╡рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд┐рдпрд╛ред рдореИрдВрдиреЗ рдЗрд╕ рдЦреЗрд▓ рдХреЛ рд╡рд┐рдо рдХреНрд░реЙрдХреЗрдЯ рдХрд╣рд╛ред
рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣
рдореИрдВрдиреЗ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдореЗрд░реЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдкрд╛рда рд╕рдВрдкрд╛рджрди рд╣рдореЗрд╢рд╛ рд╡рд┐рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП 45 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рд╕реНрдХреНрд░рд┐рдкреНрдЯрдЖрдЙрдЯ рдзреНрд╡рдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕рдореЗрдВ рдХреЛрдИ рднреА рдХреАрд╕реНрдЯреНрд░реЛрдХ рд▓реЙрдЧ рдХрд┐рдпрд╛ред рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд▓реЙрдЧ рдЗрди рдореЗрдВ рдХреНрд▓рд┐рдХ рд░рд┐рдХреЙрд░реНрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдмрдирд╛рдпрд╛:
alias vim='vim -w ~/.vimlog "$@"'
рдЙрд╕рдХреЗ рдмрд╛рдж, рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрддрдирд╛ рдЖрд╕рд╛рди рдирд╣реАрдВ рдерд╛ред рд╡рд┐рдо рдПрдХ рдореЛрдбрд▓ рдПрдбрд┐рдЯрд░ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдХрдорд╛рдВрдб рдХреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдореЛрдб рдореЗрдВ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд░реНрде рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХрдорд╛рдВрдб рд╕рдВрджрд░реНрдн-рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╣реЛрддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдЙрдирдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рд╡реЗ рд╡рд┐рдо рдмрдлрд░ рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ
cib рдХрдорд╛рдВрдб рдпреВрдЬрд░ рдХреЛ рдПрдбрд┐рдЯ рдореЛрдб рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ рдпрджрд┐ рдХрдорд╛рдВрдб рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдЕрдВрджрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ рдпрджрд┐ рдЗрд╕реЗ рдмреНрд░реИрдХреЗрдЯ рдХреЗ рдмрд╛рд╣рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐
cib рдХреЛ рд╕рдВрдкрд╛рджрди рдореЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реЛрдЧрд╛ - рдпрд╣ рд╡рд░реНрддрдорд╛рди рдмрдлрд╝рд░ рдХреЛ
"cib" рд╡рд░реНрдг
рд▓рд┐рдЦреЗрдЧрд╛ ред
рдореИрдВрдиреЗ vim рдХрдорд╛рдВрдбреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрдореНрдореАрджрд╡рд╛рд░реЛрдВ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА, рдЬрд┐рд╕рдореЗрдВ рдФрджреНрдпреЛрдЧрд┐рдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЬреИрд╕реЗ рдХрд┐
antler рдФрд░
parsec , рд╕рд╛рде рд╣реА vim рд╡рд┐рд╢реЗрд╖рдЬреНрдЮрддрд╛ рдкрд░рд┐рдпреЛрдЬрдирд╛
vimprint рд╢рд╛рдорд┐рд▓ рд╣реИрдВ ред рдХреБрдЫ рд╡рд┐рдЪрд╛рд░ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдЯреВрд▓ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХрд╛рдлреА рдЬрдЯрд┐рд▓ рдкрд╛рд░реНрд╕рд░реНрд╕ рдХреЗ рдЕрдзреНрдпрдпрди рдкрд░ рдмрд╣реБрдд рд╕рдордп рдмрд┐рддрд╛рдирд╛ рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЕрдиреБрдЪрд┐рдд рдерд╛ред
рдореИрдВрдиреЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡реНрдпреЛрдо рдХрдорд╛рдВрдб рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреЛ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИрд╕реНрдХреЗрд▓ рдкрд░ рдПрдХ рдирдо рд▓реЗрдХреНрд╕рд░ рд▓рд┐рдЦрд╛ред рдореЗрд░рд╛ рд▓реЗрдХреНрд╕рд░ рдЖрдЧреЗ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд▓реЙрдЧ рд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдХрдорд╛рдВрдб рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП
рдореЛрдиреЛрдЗрдбреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛
рд╣реИ ред рдпрд╣рд╛рдБ рд▓реЗрдХреНрд╕рд░ рд╕реНрд░реЛрдд рд╣реИ:
import qualified Data.ByteString.Lazy.Char8 as LC import qualified Data.List as DL import qualified Data.List.Split as LS import Data.Monoid import System.IO main = hSetEncoding stdout utf8 >> LC.getContents >>= mapM_ putStrLn . process process = affixStrip . startsWith . splitOnMode . modeSub . capStrings . split mark . preprocess subs = appEndo . mconcat . map (Endo . sub) sub (s,r) lst@(x:xs) | s `DL.isPrefixOf` lst = sub' | otherwise = x:sub (s,r) xs where sub' = r ++ sub (s,r) (drop (length s) lst) sub (_,_) [] = [] preprocess = subs meta . DL.intercalate " " . DL.words . DL.unwords . DL.lines . LC.unpack splitOnMode = DL.concat $ map (\el -> split mode el) startsWith = filter (\el -> mark `DL.isPrefixOf` el && el /= mark) modeSub = map (subs mtsl) split sr = filter (/= "") $ s `LS.splitOn` r affixStrip = clean . concat . map (\el -> split mark el) capStrings = map (\el -> mark ++ el ++ mark) clean = filter (not . DL.isInfixOf "[M") (mark, mode, n) = ("-(*)-","-(!)-", "") meta = [("\"",n),("\\",n),("\195\130\194\128\195\131\194\189`",n), ("\194\128\195\189`",n),("\194\128kb\ESC",n), ("\194\128kb",n),("[>0;95;c",n), ("[>0;95;0c",n), ("\ESC",mark),("\ETX",mark),("\r",mark)] mtsl = [(":",mode),("A",mode), ("a",mode), ("I",mode), ("i",mode), ("O",mode),("o",mode),("v", mode),("/",mode),("\ENQ","тМГe"), ("\DLE","тМГp"),("\NAK","тМГu"),("\EOT","тМГd"),("\ACK","тМГf"), ("\STX","тМГf"),("\EM","тМГy"),("\SI","тМГo"),("\SYN","тМГv"), ("\DC2","тМГr")]
рдФрд░ рдпрд╣рд╛рдБ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рд╕реЗ рдкрд╣рд▓реЗ рдФрд░ рдмрд╛рдж рдореЗрдВ рдбреЗрдЯрд╛ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
cut -c 1-42 ~/.vimlog | tee >(cat -v;echo) | ./lexer `Mihere's some text^Cyyp$bimore ^C0~A.^C:w^M:q `M yyp$b 0~
рд▓реЗрдХреНрд╕рд░ рдорд╛рдирдХ рдЗрдирдкреБрдЯ рд╕реЗ рдкрдврд╝рддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрдорд╛рдВрдб рдХреЛ рдорд╛рдирдХ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рднреЗрдЬрддрд╛ рд╣реИред рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХрдЪреНрдЪрд╛ рдбреЗрдЯрд╛ рджреВрд╕рд░реА рдкрдВрдХреНрддрд┐ рдкрд░ рд╕реНрдерд┐рдд рд╣реИ, рдФрд░ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рдкрд░ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдЗрд╕реА рдХреНрд░рдо рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдХрдорд╛рдВрдб рдХреЗ рдПрдХ рд╕рдореВрд╣ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддреА рд╣реИред рд▓реЗрдХреНрд╕рд░ рдиреЗ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ
`рдПрдо ' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреБрдЫ рдмрдлрд░ рдореЗрдВ рдЬрд╛рдХрд░ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдореЗрдВ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдлрд┐рд░
рдпрд╣рд╛рдБ рд╕рдВрдкрд╛рджрди рдореЛрдб рдореЗрдВ
рдХреБрдЫ рдкрд╛рда рджрд░реНрдЬ рдХрд┐рдпрд╛, рдлрд┐рд░ рд▓рд╛рдЗрди рдХреЛ рдХреЙрдкреА / рдкреЗрд╕реНрдЯ рдХрд┐рдпрд╛ рдФрд░ рдХрдорд╛рдВрдб рдореЗрдВ
$ y рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЗрди рдХреЗ рдЕрдВрддрд┐рдо рд╢рдмреНрдж рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЧрдпрд╛
$ b ред рдлрд┐рд░ рдЙрдиреНрд╣реЛрдВрдиреЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдкрд╛рда рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд┐рдпрд╛ рдФрд░ рдЕрдВрддрддрдГ рдкреВрдВрдЬреА рдХрдорд╛рдВрдб
0 ~ рдХреЗ рд╕рд╛рде рдкрд╣рд▓реЗ рдЪрд░рд┐рддреНрд░ рдХреА рдЬрдЧрд╣, рд▓рд╛рдЗрди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЪрд▓реЗ рдЧрдПред
рдореБрдЦреНрдп рдЙрдкрдпреЛрдЧ рдХрд╛ рдирдХреНрд╢рд╛
рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ
рдкреИрдЯреНрд░рд┐рдХ рд╡рд┐рдб рджреНрд╡рд╛рд░рд╛ рдЕрджреНрднреБрдд
рд╣реАрдЯрдореИрдк-рдХреАрдмреЛрд░реНрдб рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛, рдФрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдХрд╕реНрдЯрдо рд▓реЗрдпрд░ рдХреЛ рд▓реАрдХрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ред рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдЯрд╛-рдкрд╛рддреНрд░реЛрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдИрдПрд╕рд╕реА, Ctrl рдФрд░ рд╕реАрдПрдордбреА, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдбреЗрдЯрд╛ рд▓реЛрдбрд░ рд▓рд┐рдЦрдиреЗ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рд╕рдВрд╢реЛрдзрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдореИрдВрдиреЗ рдореЗрдЯрд╛-рдкрд╛рддреНрд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдпреВрдирд┐рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреАрдмреЛрд░реНрдб рдкрд░ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдпрд╣рд╛рдВ рдореБрдЭреЗ 500,000 рдХреЗ рдХрд░реАрдм рдХрдорд╛рдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдорд┐рд▓рд╛ рд╣реИ (рд░рдВрдЧ рдХреА рддреАрд╡реНрд░рддрд╛ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ)ред

рдкрд░рд┐рдгрд╛рдореА рдорд╛рдирдЪрд┐рддреНрд░ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ Ctrl рдХреБрдВрдЬреА рдХрд╛ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдореИрдВ рдЗрд╕реЗ рдХрдИ рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
ControlP рдХреЗ рд▓рд┐рдП
^ p , рдпрд╛
^ j ^ k рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреБрд▓реЗ рдмрдлрд╝рд░реНрд╕ рдкрд░ рдПрдХ рд▓реВрдкред
рдПрдХ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬрд┐рд╕рдиреЗ рдорд╛рдирдЪрд┐рддреНрд░ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рддреЗ рд╕рдордп рдореЗрд░реА рдЖрдВрдЦ рдХреЛ рдкрдХрдбрд╝рд╛, рд╡рд╣
^ рдИ ^ рд╡рд╛рдИ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдерд╛
ред рд╣рд░ рджрд┐рди рдореИрдВ рдЗрди рдЖрджреЗрд╢реЛрдВ рдХреЛ рдХреЛрдб рдХреЛ рдКрдкрд░ / рдиреАрдЪреЗ рдиреЗрд╡рд┐рдЧреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдКрд░реНрдзреНрд╡рд╛рдзрд░ рдЖрдВрджреЛрд▓рди рдЕрдХреНрд╖рдо рд╣реИред рдЬрдм рднреА рдЗрдирдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдПрдХ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд░реНрд╕рд░ рдПрдХ рд╕рдордп рдореЗрдВ рдХреЗрд╡рд▓ рдХреБрдЫ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рддрд╛ рд╣реИред рдпрд╣
^ U ^ D рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдХрд░реНрд╕рд░ рдХреЛ рдЖрдзреА рд╕реНрдХреНрд░реАрди рдкрд░ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред
рдЖрджреЗрд╢реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡реГрддреНрддрд┐
рдкреНрд░рдореБрдЦ рдЙрдкрдпреЛрдЧ рдорд╛рдирдЪрд┐рддреНрд░ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреБрдВрдЬрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдореИрдВ рд╡рд┐рднрд┐рдиреНрди рдХреБрдВрдЬреА рдЕрдиреБрдХреНрд░рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдПрдХ рд▓рд╛рдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рд╕рдмрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдХрдорд╛рдВрдб рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡реГрддреНрддрд┐ рдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд╛рдЗрдирд░ рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛:
$ sort normal_cmds.txt | uniq -c | sort -nr | head -10 | \ awk '{print NR,$0}' | column -t 1 2542 j 2 2188 k 3 1927 jj 4 1610 p 5 1602 тМГj 6 1118 Y 7 987 тМГe 8 977 zR 9 812 P 10 799 тМГy
рдЖрдард╡реЗрдВ рд╕реНрдерд╛рди рдкрд░
zR рджреЗрдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдерд╛ред рдЗрд╕ рддрдереНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рд╕рдВрдкрд╛рджрди рдкрд╛рда рдХреЗ рдкреНрд░рддрд┐ рдЕрдкрдиреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЧрдВрднреАрд░ рдЕрдХреНрд╖рдорддрд╛ рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдореЗрд░реЗ
.vimrc рдореЗрдВ рдпрд╣ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рда рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдзреНрд╡рд╕реНрдд рдХрд░рдиреЗ
рдХрд╛ рдирд┐рд░реНрджреЗрд╢ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рд┐рдиреНрдпрд╛рд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореИрдВрдиреЗ рд▓рдЧрднрдЧ рдкреВрд░реЗ рдкрд╛рда рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рдерд╛ред рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рдмрд╕
zR рдХреЗ рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд╕реЗрдЯрд┐рдВрдЧ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИред
рдЯреАрдо рдХреА рдХрдард┐рдирд╛рдИ
рдПрдХ рдФрд░ рдЕрдиреБрдХреВрд▓рди рдЬрд┐рд╕реЗ рдореИрдВ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рд╡рд╣ рд╕рд╛рдорд╛рдиреНрдп рдореЛрдб рдХрдорд╛рдВрдб рдХреА рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рдореИрдВ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдореБрдЭреЗ рдРрд╕реЗ рдЖрджреЗрд╢ рдорд┐рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдХрд╛ рдореИрдВ рджреИрдирд┐рдХ рдЖрдзрд╛рд░ рдкрд░ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХреАрд╕реНрдЯреНрд░реЛрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреЗ рдЖрджреЗрд╢реЛрдВ рдХреЛ рд╢реЙрд░реНрдЯрдХрдЯ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдирдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдЧрддрд┐ рджреЗрдЧрд╛ред рдХрдорд╛рдВрдб рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рдПрдХ рдЙрдкрд╛рдп рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ
рдПрдиреНрдЯреНрд░реЙрдкреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рдШреБ рдкрд╛рдпрдерди рд▓рд┐рдкрд┐ рд╕реЗ рдорд╛рдкрд╛:
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдорд╛рдирдХ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдкрдврд╝рддреА рд╣реИ рдФрд░ рдЙрдЪреНрдЪрддрдо рдПрдиреНрдЯреНрд░реЙрдкреА рдХреЗ рд╕рд╛рде рдХрдорд╛рдВрдб рдЬрд╛рд░реА рдХрд░рддреА рд╣реИред рдореИрдВрдиреЗ рдПрдиреНрдЯреНрд░рд╛рдкреА рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрдХреНрд╕рд░ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛:
$ sort normal_cmds.txt | uniq -c | sort -nr | sed "s/^[ \t]*//" | \ awk 'BEGIN{OFS="\t";}{if ($1>100) print $1,$2}' | \ cut -f2 | ./entropy.py 1 ggvG$"zy 1.2516
рдореИрдВ рдЙрди рдЯреАрдореЛрдВ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рдиреНрд╣реЗрдВ 100 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдореИрдВ рдЙрдирдореЗрдВ рд╕реЗ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдПрдиреНрдЯреНрд░рд╛рдкреА рд╡рд╛рд▓реА рдЯреАрдо рдвреВрдВрдврддрд╛ рд╣реВрдВред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк,
ggvG $ '' zy рдХрдорд╛рдВрдб рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕реЗ 45 рджрд┐рдиреЛрдВ рдореЗрдВ 246 рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдХрдорд╛рдВрдб рдХреЛ 11 рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЕрдирд╛рдбрд╝реА рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░
z рдХреЛ рд░рдЬрд┐рд╕реНрдЯрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реЗ рд╡рд░реНрддрдорд╛рди рдмрдлрд░ рдХреЛ рдХреЙрдкреА рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЖрдорддреМрд░ рдкрд░ рдЗрд╕ рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдмрдлрд░ рдХреА рдкреВрд░реА рд╕рд╛рдордЧреНрд░реА рдХреЛ рджреВрд╕рд░реЗ рдореЗрдВ рд▓реЗ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рддрд╛ рд╣реВрдВред рдмреЗрд╢рдХ, рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдПрдХ рдирдпрд╛ рд╢реЙрд░реНрдЯрдХрдЯ рдЬреЛрдбрд╝рд╛ рд╣реИ
nnoremap <leader>ya ggvG$"zy
рдирд┐рд╖реНрдХрд░реНрд╖
рдореЗрд░реЗ рд╡рд┐рдо рдХреНрд░реЙрдЪ рдореИрдЪ рдиреЗ рд╡рд┐рдо рдореЗрдВ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП 3 рдЕрдиреБрдХреВрд▓рди рдХреА рдкрд╣рдЪрд╛рди рдХреА:
- ^ E ^ Y рдХреЗ рдмрдЬрд╛рдп ^ U ^ D рдиреЗрд╡рд┐рдЧреЗрд╢рди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛
- ZR рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдмрдлрд░ рдореЗрдВ рдСрдЯреЛ-рдкрддрди рдкрд╛рда рдХреЛ рд░реЛрдХреЗрдВ
- рдХреНрд░рд┐рдпрд╛ ggvG $ '' zy рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реЙрд░реНрдЯрдХрдЯ рдмрдирд╛рдирд╛
рдЗрди 3 рд╕рд░рд▓ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдиреЗ рдореБрдЭреЗ рд╣рд░ рдорд╣реАрдиреЗ рд╣рдЬрд╛рд░реЛрдВ рдЕрдирд╛рд╡рд╢реНрдпрдХ рдХреАрд╕реНрдЯреНрд░реЛрдХреНрд╕ рд╕реЗ рдмрдЪрд╛рдпрд╛ред
рдХреЛрдб рдХреЗ рдХреБрдЫ рднрд╛рдЧ рдЬреЛ рдореИрдВрдиреЗ рдКрдкрд░ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдП рд╣реИрдВ рд╡реЗ рдереЛрдбрд╝реЗ рдЕрд▓рдЧ-рдерд▓рдЧ рд╣реИрдВ рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдореЗрд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рдЪрд░рдгреЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдореЗрдХрдлрд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рддрд╛ рд╣реВрдВ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдореЗрд░реЗ рд▓реЗрдЦ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХреЛрдб рдПрдХ рд╕рд╛рде рдХреИрд╕реЗ рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред
SHELL := /bin/bash LOG := ~/.vimlog CMDS := normal_cmds.txt FRQS := frequencies.txt ENTS := entropy.txt LEXER_SRC := lexer.hs LEXER_OBJS := lexer.{o,hi} LEXER_BIN := lexer H := entropy.py UTF := iconv -f iso-8859-1 -t utf-8 .PRECIOUS: $(LOG) .PHONY: all entropy clean distclean all: $(LEXER_BIN) $(CMDS) $(FRQS) entropy $(LEXER_BIN): $(LEXER_SRC) ghc --make $^ $(CMDS): $(LEXER_BIN) cat $(LOG) | $(UTF) | ./$^ > $@ $(FRQS): $(H) $(LOG) $(CMDS) sort $(CMDS) | uniq -c | sort -nr | sed "s/^[ \t]*//" | \ awk 'BEGIN{OFS="\t";}{if ($$1>100) print NR,$$1,$$2}' > $@ entropy: $(H) $(FRQS) cut -f3 $(FRQS) | ./$(H) clean: @- $(RM) $(LEXER_OBJS) $(LEXER_BIN) $(CMDS) $(FRQS) $(ENTS) distclean: clean