好的,这是一个解决方案:
将以下内容放入/path/to/edit-file-under-cursor.screen
:
# edit-file-under-cursor.screen
# prevent messages from slowing this down
msgminwait 0
# copy path starting at cursor
stuff " Ebe "
# write the path to a file
writebuf /tmp/screen-copied-path
# open that file in vim in a new screen window
screen /bin/sh -c 'vim `cat /tmp/screen-copied-path`'
# turn message waiting back on
msgminwait 1
# vi: ft=screen
然后将此行添加到您的.screenrc
:
# bind CTRL-f to open the file starting at the cursor
# when in copy mode
bindkey -m ^f source /path/to/edit-file-under-cursor.screen
(/path/to/
适当地改变)
然后,要使用,请确保您重新启动screen
(或重新加载.screenrc
)。使用 进入复制模式^A[
,将光标移至文件名的第一个字符,然后按CTRL-f
。
我已经对此进行了测试,它对我有用,所以如果您有任何问题,请告诉我。
如果您想了解我是如何知道如何执行此操作的,请man screen
查看所有各种命令是如何工作的。
可以进行的一项改进是能够找到路径的开头,但仅使用屏幕的复制模式移动命令(例如,移动到“”的第一个/
移动/a/path
到|
“ |/a/path
”的任何东西)我无法可靠地做到这一点)
这是由于screen
复制模式下的移动命令的限制:
移动键:
h, j, k, l 逐行或逐列移动光标。
0、^ 和 $ 移动到最左边的列,移动到该行的第一个或最后一个非空白字符。
H、M 和 L 将光标移动到窗口顶部、中心或底部线的最左列。
+ 和 - 上下放置一行。
G 移动到指定的绝对行(默认:缓冲区结束)。
| 移动到指定的绝对列。
w, b, e 逐字移动光标。
B、E 逐字移动光标(如在 vi 中)。
Cu 和 Cd 将显示向上/向下滚动指定的行数,同时保留光标位置。(默认:半屏全屏)。
Cb 和 Cf 向上/向下滚动显示全屏。
g 移动到缓冲区的开头。
% 跳转到缓冲区的指定百分比。
...
搜索:
/vi 似的向前搜索。
? 类似 vi 的向后搜索。
Ca s Emacs 风格的增量搜索向前。
Cr Emacs 风格的反向 i-search。
因此,如果我们将stuff
上面的行更改为
stuff "Bw Ebe "
它将移动到路径的开头,但它也将包括路径之前的任何非空白垃圾。因此,只要您的所有路径都是用空格分隔的(在两边),这应该可以工作。
实际上
stuff "B//^M E?/^Me "
似乎工作得很好,因为它使用搜索来查找第一个和最后一个/
(^M
通过按 CTRL-v 在 vim 中键入,然后输入)。我还没有测试所有的边缘情况,但它似乎适用于:
/一条路径
#/一条路径
/一条路径#
但是,它会失败
一个/相对/路径