基于 Vim 的 Emacs 流浪模式替代方案

基于 Vim 的 Emacs 流浪模式替代方案

我目前正在使用vim(实际上neovim)作为我的 IDE 来编写和执行GNU R-code(使用Nvim-R-plugin,另请参阅https://github.com/jalvesaq/Nvim-R,作为我的 REPL),它在我的本地计算机上运行得很好。当有更高的工作负载或需求时,我会ssh进入远程计算机,安装我的nvim插件并nvim作为服务器上的“本地”应用程序运行。

最近我意识到Emacs有巧妙的TRAMP模式(透明远程访问,多协议,另见https://www.emacswiki.org/emacs/TrampMode),它不仅允许远程打开文件,还允许在远程计算机上执行命令。据我了解,这意味着我可以用作EmacsREPL(例如使用ESS),使用我的本地Emacs实例编写代码,但在我安装的远程计算机上执行它GNU R(另请参阅https://ess.r-project.org/Manual/ess.html#ESS-processes-on-Remote-Computers)。

我很想知道vimor是否存在类似的东西neovim。我知道我可以使用远程编辑文件

vim scp://USER@SERVER:PORT//absolute/path/to/file

或者

vim
:e scp://USER@SERVER:PORT//absolute/path/to/file

但据我了解,这实际上在我的本地计算机上创建了该文件的临时副本;运行我的Nvim-R-REPL 时,这会在本地打开工作目录/tmp/something

我想过尝试一下vim-slime(参见https://github.com/jpalardy/vim-slime),repl.nvim(看https://github.com/HiPhish/repl.nvim)或neoterm(参见https://github.com/kassio/neoterm),但我不确定我是否能够尝试复制Emacs类似的体验。

有任何想法吗?有人取得过类似的成就吗?

答案1

免责声明:我已经回答过这个问题了vi.SE并且只是为了完整性而重复答案。


我仍然没有找到完美的解决方案,但一个对我来说相当有效的解决方案:通过使用vim-slime(仅写在vimscript)。

在我的配置文件(~/.config/nvim/init.vim~/.vimrc)中,我使用以下行:

let g:slime_target = "neovim"
"let g:slime_target = "vimterminal"
"let g:slime_target = "screen"
"let g:slime_target = "tmux"

只需要其中之一。第一行用于neovim,但如果我使用,vim我将使用第二行(未注释)。在我的工作流程中,我ssh进入远程计算机,然后打开我想要使用的文件(例如 myscript.Rlist_of_commands.sh),然后创建一个文件:vertical split并随后打开一个:terminal,然后我可以在其中运行例如 my GNU R-interpreter 或 a bash。如果您更喜欢使用终端多路复用器,则可以使用screen(with Ctrl-a | Ctrl-a l Ctrl-a c) 或tmux(with )创建新的拆分Ctrl-b %,并在配置文件中包含上面的相应行(未注释)。

然后,当我调用:SlimeSend- 命令(缩写为Ctrl-c Ctrl-c,因此必须按相同的组合键两次)时,我当前光标所在的文本被选择发送到目标(当配置正确时并且您的分割已经存在,并且默认情况下已正确写入)。

这可能不像TRAMP中那样优雅Emacs,但它确实有效。但如果有人有改进的想法,请毫不犹豫地提出来!

相关内容