わかりました、ここに解決策があります:
に以下を入れます/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
、さまざまなコマンドがすべてどのように機能するかを確認してください。
できる改善の 1 つは、パスの始まりを見つけられるようにすることですが、画面のコピー モードの移動コマンドだけでは確実にそれを行うことができませんでした (たとえば、" " の最初/
に移動したものは " "/a/path
に移動しました|
) 。 |/a/path
)
screen
これは、コピー モードでの の移動コマンドの制限によるものです。
移動キー:
h、j、k、l カーソルを行ごと、または列ごとに移動します。
0、^、および $ は、行の最初または最後の非空白文字に、左端の列に移動します。
H、M、および L は、カーソルをウィンドウの上、中央、または下の行の左端の列に移動します。
+ と - は上下に 1 行ずつ配置します。
G は、指定された絶対行 (デフォルト: バッファーの終わり) に移動します。
| | 指定された絶対列に移動します。
w、b、e カーソルを単語ごとに移動します。
B、E カーソルを WORD ごとに移動します (vi と同様)。
Cu と Cd は、カーソル位置を維持しながら、指定された行数だけ表示を上下にスクロールします。(デフォルト: ハーフスクリーンフル)。
Cb と Cf は、画面全体を上下にスクロールします。
g はバッファの先頭に移動します。
% は、バッファの指定された割合にジャンプします。
...
検索中:
/ Vi のような前方検索。
? Vi のような後方検索。
Ca s Emacs スタイルの増分検索前方。
Cr Emacs スタイルの逆 i 検索。
したがって、stuff
上記の行を次のように変更すると
stuff "Bw Ebe "
パスの先頭に移動しますが、パスの前にある空白以外のジャンクも含まれます。したがって、すべてのパスが (両側で) 空白で区切られている限り、これは機能するはずです。
実際
stuff "B//^M E?/^Me "
検索を使用して最初と最後を見つけるため、かなりうまく機能しているようです/
( ^M
CTRL-v を押して vim に入力し、Enter を押します)。すべてのエッジケースをテストしたわけではありませんが、次の場合に機能するようです:
/通り
#/通り
/通り#
ただし、次の場合は失敗します
/相対/パス