Хорошо, вот решение:
Введите в /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
, чтобы
посмотрите, как работают все различные команды.
Одним из улучшений, которое можно было бы сделать, является возможность найти начало пути, но я не смог сделать это надежно только с помощью команд перемещения экрана в режиме копирования (например, всего, что переместилось на первый /
из "*). 1026 * "перемещено в |
из" |/a/path
")
Это связано с ограничениями команд перемещения screen
в режиме копирования:
Movement keys:
h, j, k, l move the cursor line by line or column by column.
0, ^ and $ move to the leftmost column, to the first or last non-whitespace character on the line.
H, M and L move the cursor to the leftmost column of the top, center or bottom line of the window.
+ and - positions one line up and down.
G moves to the specified absolute line (default: end of buffer).
| moves to the specified absolute column.
w, b, e move the cursor word by word.
B, E move the cursor WORD by WORD (as in vi).
C-u and C-d scroll the display up/down by the specified amount of lines while preserving the cursor position. (Default: half screen-full).
C-b and C-f scroll the display up/down a full screen.
g moves to the beginning of the buffer.
% jumps to the specified percentage of the buffer.
<b>...</b>
Searching:
/ Vi-like search forward.
? Vi-like search backward.
C-a s Emacs style incremental search forward.
C-r Emacs style reverse i-search.
Так что, если мы изменили строку stuff
выше на
stuff "Bw Ebe "
он переместился бы в начало пути, но он также включал бы любой непробельный мусор, который предшествовал пути. Так что, пока все ваши пути разделены пробелами (с обеих сторон), это должно работать.
На самом деле
stuff "B//^M E?/^Me "
, кажется, работает довольно хорошо, так как он использует поиск, чтобы найти первый и последний /
(введите ^M
в vim, нажав CTRL-v, затем введите). Я не проверял все крайние случаи, но, кажется, он работает для:
/a/path
#/a/path
/a/path#
Однако, это не удастся для
a/relative/path