Короче, я опять упоросля и приделал repl ноды к vim.
Суть такая: на одном мониторе код с редактором, на втором нода с repl. Код из редактора по хоткею отправляется в ноду, там что-то происходит и результат вываливается в терминал. Из ноды можно забирать данные по автодополнению для всяких структур и прочего. Нужно это мне для всякого кодинга «на горячую» - дёргать запросы, ворошить данные, структуры, тут же смотреть результат, что-то переписывать и т.д. Все работает на прекрасных и надёждый костылях - двух FIFO
Итак, поделка:
//node repl server
//repl.js
const repl = require("repl");
const fs = require("fs");
const outFifo = "/path/to/output_fifo";
var replServer = repl.start( { useGlobal : true });
replServer.context.useAC = function(str) {
replServer.completer(str, (err, v) => {
let ret = v[0].toString().replace(/,/g,"\n");
let out = fs.createWriteStream(outFifo);
out.end(ret);
});
}
func Js_run()
execute ":yank"
execute "'[,']w! >>/path/to/input_fifo"
endfunction
func AC_node(s, b)
if a:s
let line = getline('.')
let cmd = "void useAC('".line."')"
new
setlocal buftype=nofile bufhidden=hide noswapfile nobuflisted
put=cmd
execute "w >>/path/to/input_fifo"
q
return line
else
let ret = []
let s:lines = readfile("/path/to/output_fifo")
for s:line in s:lines
call add(ret, s:line)
endfor
return ret
endif
endfun
set completefunc=AC_node
fun Js_runall()
execute "w! >>/path/to/input_fifo"
endfunction
map <F2> :call Js_run()<CR>
map <F5> :call Js_runall()<CR>
inoremap <C-@> <C-X><C-U>
inoremap <F2> <ESC>:call Js_run()<CR>i
$ tail -f /path/to/input_fifo | node repl.js
inb4: atom, sublimetext и пр электроноподелки.
Жирно. Не люблю. Мой велик - норм.