我目前正在使用vim
(实际上是neovim
)作为编写和执行GNU R
-code的IDE (使用Nvim-R
-plugin,请参阅https://github.com/jalvesaq/Nvim-R,它是我的REPL),它在我的本地机器上工作得很好。当有更高的工作负载或要求时,我是ssh
-ing到远程机器,安装我的nvim
插件,并在服务器上作为“本地”应用程序运行nvim
。
最近,我意识到Emacs
具有巧妙的TRAMP
模式(透明远程访问、多协议,请参见https://www.emacswiki.org/emacs/TrampMode),它不仅允许远程打开文件,而且还允许在远程计算机上执行命令。据我所知,这意味着我可以使用Emacs
作为REPL (例如使用ESS
),使用本地Emacs
-instance编写代码,但在安装GNU R
的远程机器上执行它(也请参阅https://ess.r-project.org/Manual/ess.html#ESS-processes-on-Remote-Computers)。
我想知道vim
或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
-like体验。
有什么想法吗?有人做过类似的事吗?
发布于 2021-01-07 02:20:19
免责声明:我已经在vi.SE
上回答了这个问题,只是为了完整起见重复了答案。
我仍然没有找到完美的解决方案,但是一个对我来说相当好的解决方案:通过使用vim-slime
(它只用vimscript
编写)。
在我的配置文件(~/.config/nvim/init.vim
或~/.vimrc
)中,我使用了以下一行(S):
let g:slime_target = "neovim"
"let g:slime_target = "vimterminal"
"let g:slime_target = "screen"
"let g:slime_target = "tmux"
只需要其中之一。第一行用于neovim
,但如果使用vim
,则使用第二行(未注释)。在我的工作流中,我是ssh
-ing,进入一个远程机器,然后打开我想要使用的文件(例如,我的script.R
或list_of_commands.sh
),然后创建一个:vertical split
,然后打开一个:terminal
,然后我可以在那里运行,比如我的GNU R
-interpreter或bash
。如果您喜欢使用终端多路复用器,则可以使用screen
(与Ctrl-a |
Ctrl-a l
Ctrl-a c
)或tmux
(与Ctrl-b %
一起)创建新的拆分,并在config-文件中从上面(未注释)创建适当的行。
然后,当我调用:SlimeSend
-command (缩写为Ctrl-c
Ctrl-c
,因此必须按两次相同的键组合)时,将选择当前对光标的文本发送到目标(当配置正确且您的拆分已经存在时,默认情况下写入正确)。
这可能不像TRAMP
在Emacs
中那样优雅,但它可以工作。但是,如果有人有改进的想法,不要犹豫,建议他们!
https://unix.stackexchange.com/questions/606695
复制相似问题