【vim-slime】发射代码, 打造简单的REPL环境


1 需求

  • 像在PyCharm中一样,在另外一个终端窗口中,部分地执行nvim中的代码,可以逐行或者多行。
  • 另外一个窗口运行了类似Python, R这样的交互式环境。

2 工具

  • vim/nvim
  • plugin manager, lazy.nvim
  • vim-slime
  • Terminal multiplexing tools, tmux / GNU screen

3 配置步骤

(1)安装配置vim-slime插件

  • 这里以neovim 和 lazy.nvim 插件管理器为例,但是这个插件是vim插件,配置参数跟nvim插件有差异,比方说不支持opts参数,要用config = functions()
  • 采用 vim-slime 默认的 screen 作为中介桥梁
  • tmux配置见该插件说明文档
-- ~/.config/nvim/lua/plugins/XXX.lua

  {
    "jpalardy/vim-slime",
    ft = { "python" },

    init = function()
      -- vim.g.slime_target = "neovim" -- 发送到 Neovim 终端
      vim.g.slime_target = "screen"
      vim.g.slime_no_mappings = true
    end,

    config = function()
      vim.g.slime_input_pid = false
      vim.g.slime_suggest_default = true
      vim.g.slime_menu_config = false
      vim.g.slime_neovim_ignore_unlisted = false
      -- options not set here are g:slime_neovim_menu_order, g:slime_neovim_menu_delimiter, and g:slime_get_jobid
      -- see the documentation above to learn about those options

      -- called MotionSend but works with textobjects as well
      vim.keymap.set("n", "gz", "<Plug>SlimeMotionSend", { remap = true, silent = false })
      vim.keymap.set("n", "gzz", "<Plug>SlimeLineSend", { remap = true, silent = false })
      vim.keymap.set("x", "gz", "<Plug>SlimeRegionSend", { remap = true, silent = false })
      vim.keymap.set("n", "gzc", "<Plug>SlimeConfig", { remap = true, silent = false })
    end,
  },

(2)安装GNU screen

$ pamac install screen

4 使用

  1. 在另一个终端里打开一个所谓的screen session, $ screen -S my_session, 并且打开REPL交互环境。注意:对于Python, 用 IPython/bpython/ptpython等环境, 关闭自动缩进功能(另可以配置"bracketed paste mode"1), 原因是Python自带的环境自动缩进功能跟screen发射的代码不兼容.
  2. 这时通过$ screen -ls 能查询当前已经打开的screen sessions
  3. 回到 nvim 中尝试发送代码, vim-slime 会提示输入 session name 和 window name, 前者对应 my_session, 后者是一个序号, 比方说0.
  4. 一切正常的话,代码就应该去到了指定的终端环境
  5. 可以调整代码发送目的地,参考文档SlimeConfig部分

5 References

  • 这个不错, https://joongsup.rbind.io/post/2018/10/06/vim-and-slime/
  • https://github.com/jpalardy/vim-slime/blob/main/assets/doc/targets/screen.md
  • http://nicksun.fun/linux/2020/07/06/slime-time.html

  1. 详见自动缩进相关讨论 https://github.com/jpalardy/vim-slime/issues/455#issuecomment-2916692631 ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值