如何在Screen窗口/会话间共享已录制的Vim宏?
实现跨Screen窗口/会话共享Vim宏的方法
核心逻辑
Vim宏本质是存在寄存器中的(默认录制到q寄存器,也可指定其他字母寄存器),共享宏就是把目标寄存器的内容导出,再在其他Vim实例中导入。
步骤1:导出已录制的宏
在录制宏的Vim窗口中执行:
- (可选)确认宏内容:输入
:reg q(把q换成你实际使用的寄存器字母) - 将寄存器内容写入本地文件:输入
:let @q = getreg('q') | call writefile([@q], '~/.vim_macro_q')- 说明:
getreg('q')读取q寄存器内容,writefile将内容写入~/.vim_macro_q文件,路径可自行修改(比如当前目录)
- 说明:
步骤2:在同会话其他Screen窗口的Vim中导入
打开目标Vim窗口后:
- 读取文件内容到目标寄存器:输入
:let @q = readfile('~/.vim_macro_q')[0]- 说明:
readfile读取文件内容,[0]取第一行(宏内容为单行格式),赋值给q寄存器
- 说明:
- 验证:输入
:reg q确认内容正确,之后用@q即可执行宏
步骤3:跨Screen会话共享
只要不同Screen会话能访问同一文件系统(本地机器或共享存储),直接复用上述导出/导入步骤即可——因为宏文件存在本地磁盘,所有会话都能读取。
临时共享(同会话内更快捷)
如果只是同Screen会话内临时共享,无需写文件:
- 若Vim支持剪贴板:在录制宏的Vim中输入
:let @+=@q(@+是系统剪贴板寄存器),切换到目标Vim后输入:let @q=@+即可 - 若Vim无剪贴板支持:
- 在录制宏的Vim中输入
:echo @q,选中输出的宏内容 - 按
Ctrl+a + [进入Screen复制模式,选中内容后按Enter复制到Screen缓冲区 - 切换到目标Vim,输入
:let @q=',按Ctrl+a + ]粘贴Screen缓冲区内容,最后补全单引号'并回车
- 在录制宏的Vim中输入
内容的提问来源于stack exchange,提问作者Nizamudheen At
相关产品推荐
相关产品推荐

