我在tmux中使用Vim而不是远程计算机上的ssh连接。我从几个地方访问远程服务器,包括工作和家里。这通常会导致陈旧的$ DISPLAY变量和相关问题,其中大部分已解决,除了一个:
如果我已经打开了vim会话,有没有办法更改它连接的X服务器而不关闭并重新打开它?我需要能够这样做,所以我可以使用X剪贴板从Vim复制文本片段。我通常会保持多个垂直分割,换行和行号,所以通过tmux这样做通常是一个巨大的麻烦,并且更愿意使用vim。
答案 0 :(得分:3)
您可以使用xpra在不同的X11服务器上显示正在运行的X11程序(特别是vim)。
该程序用于X11程序,如GNU屏幕或tmux用于终端程序。 xpra提供了一个用于运行程序的X服务器,它本身作为X服务器的X客户端,供用户显示。
你提到你正在通过tmux运行vim;你应该在tmux之外运行vim并直接使用xpra。据我所知,该程序必须从一开始就通过xpra运行。
答案 1 :(得分:2)
如果使用X的唯一目的是传输大量文本,请考虑改为使用scp。
从vim中标出您感兴趣的行并执行:w /tmp/foo
从shell(或使用ctrl-z
暂停vim; bg
)执行
scp your_username@remotehost.edu:/tmp/foo /some/local/directory
答案 2 :(得分:1)
有一个相对较新的命令xrestore可以执行以下操作:
/* @class UIViewController */
-(void)setEditing:(bool)arg2 animated:(bool)arg3 {
rdx = arg2;
rdi = self;
rax = *ivar_offset(_viewControllerFlags);
rcx = *(rdi + rax);
if (((rcx & 0x4) >> 0x2 ^ rdx) == 0x1) {
stack[-8] = rbp;
stack[-16] = r15;
stack[-24] = r14;
stack[-32] = r13;
stack[-40] = r12;
stack[-48] = rbx;
rsp = rsp - 0x38;
r12 = rdi;
*(rdi + rax) = (rcx & 0xfffffffffffffffb) + (rdx & 0xff) * 0x4;
r15 = [UIBarButtonItem alloc];
r14 = [__UIKitBundle() retain];
if ((rdx & 0xff) != 0x0) {
rax = [r14 localizedStringForKey:@"Done" value:rcx table:@"Localizable"];
rax = [rax retain];
r13 = rax;
rcx = 0x2;
rdi = r15;
rdx = rax;
}
else {
rax = [r14 localizedStringForKey:@"Edit" value:rcx table:@"Localizable"];
rax = [rax retain];
r13 = rax;
rdi = r15;
rdx = rax;
rcx = 0x0;
}
rbx = [rdi initWithTitle:rdx style:rcx target:0x0 action:0x0];
[r13 release];
[r14 release];
[r12->_editButtonItem _setItemVariation:rbx];
[rbx release];
}
return;
}