1

Screenのコピーモードからvimへのパスを開きたい

Ctrl-A f

同様に、Vimで外部ファイルを開くことができます

Ctrl-W f

ScreenのコピーモードでVimでパスを開くにはどうすればよいですか?


--- Samuil さん、肝心な動きをしてくれてありがとう

画面がオンのときの表示を表す次のコードで、マウスが PATH/file にあると仮定しましょう

text[space]PATH/file[space]text

PATH/file で ^A f を押します。ファイルの PATH を /tmp/screenCopyFile に保存して、開始catする次のコマンドで使用できるようにする必要があります。^A f

^A: exec vim `cat PATH/file`

コマンドを手動で実行しても失敗します。これは cat コマンドを展開しませんでしたが、cat というファイルを開きます。

つまり、文字f

exec vim `cat /tmp/screenCopyFile`

.screenrc でバインドする。

Rampion さん、ご回答ありがとうございます。

4

2 に答える 2

1

私はvimがあまりにも良いことを知りませんが、いくつかのコマンドで簡単に実行できるはずです。ペーストバッファにすでにファイル名がある場合は、次の便利なコマンドを使用できます。

^A : writebuf /tmp/.screenpomfile
^A : exec vim parameters

ファイルからファイル名を読み取る方法はわかりませんがvim(可能だと思います)、:execシェルで記述された独自のスクリプトで`expr`式を解析できます。

#!/bin/sh
vim `cat /tmp/.screenpomfile`

後で、独自のキーをこれらのアクションにバインドして、非常に効果的に使用できます。

于 2009-06-26T11:03:31.277 に答える
1

わかりました、ここに解決策があります:

に以下を入れます/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 "

検索を使用して最初と最後を見つけるため、かなりうまく機能しているようです/( ^MCTRL-v を押して vim に入力し、Enter を押します)。すべてのエッジケースをテストしたわけではありませんが、次の場合に機能するようです:

/通り
 #/通り
 /通り#

ただし、次の場合は失敗します

/相対/パス
于 2009-07-02T07:18:59.407 に答える