我目前正在使用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),它不仅允许远程打开文件,还允许在远程计算机上执行命令。据我了解,这意味着我可以用作Emacs
REPL(例如使用ESS
),使用我的本地Emacs
实例编写代码,但在我安装的远程计算机上执行它GNU R
(另请参阅https://ess.r-project.org/Manual/ess.html#ESS-processes-on-Remote-Computers)。
我很想知道vim
or是否存在类似的东西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.R
或list_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
,但它确实有效。但如果有人有改进的想法,请毫不犹豫地提出来!