1

次のRampionのコードの正確な目的についてはわかりません。明らかにカーソル位置でコマンドを実行するはずです。

# man-word.screen

# prevent messages from slowing this down
msgminwait 0

# copy word starting at cursor
copy                         # I am not sure why we need this
stuff " e "

# open a new window that waits for a word to run man on
# (and uses 'read' to pause on error)
screen -t man /bin/sh -c 'cat | xargs man || read'       # option -c seems to mean execute

# feed that window the copied word
# be sure to enter '^M' as 'CTRL-V ENTER' and '^D' as 'CTRL-V CTRL-D' (in vim)
paste '.'
# should display as 'stuff "^M^D"'
stuff " "

# turn message waiting back on
msgminwait 1

# vi: ft=screen

コードは次の^gようにバインドされています

bindkey -m ^f source /Users/masi/bin/screen/edit-file-under-cursor.screen

これはと同じです

bind f source /Users/masi/bin/screen/edit-file-under-cursor.screen

カーソルが次の行の先頭にあるので、コードを実行します

vim ~/.zshrc

次のような新しいバッファを取得します

代替テキストhttp://files.getdropbox.com/u/175564/screen-rampion.png

コマンドの目的は何ですか?

4

1 に答える 1

2

したがって、コマンドは任意のコードを実行しません。man <whatever>カーソルが単語の上にある場合、新しい画面ウィンドウで実行されるだけ<whatever>です。

コマンドが存在する理由は、copy何かをコピーしたいことを画面に伝える必要があるためです。パス上で常に画面のコピー モードになっているとは限りません。たとえば、vim を使用していて、vim のカーソルがパス上にある場合などです。すでにコピー モードになっている場合は、何もしません。

screen -t man /bin/sh -c 'cat | xargs man || read'
  • screen:: 新しいウィンドウを開く
  • -t man:: のタイトルを付けますman
  • /bin/sh -c 'cat | xargs man || read':: 新しいウィンドウでデフォルトのシェルを開くのではなく、新しいウィンドウでこのコマンドを実行します。
    • /bin/sh:: シェルプログラム
    • -c 'cat | xargs man || read':: 対話モードで開くのではなく、指定された文字列をスクリプトとして実行します
    • cat |:: ユーザー入力 (改行と CTRL-D で終了) を待ち、それをユーザー入力として次のコマンドにパイプします
    • xargs man:: call man、標準入力から読み取ったものをコマンドライン引数として使用man
    • || read:: 前のコマンドがゼロ以外を返した場合は、ユーザーが Enter キーを押すのを待ちます

あなたの出力から、それは次のようになります

  1. コマンドの-c一部は、新しいシェルのように見えるため実行されません ($はヒントです)。
  2. そのstuff "^M^D"部分は正しく転記されませんでした。次の非コメント行は、次のpaste '.'ように入力する必要があります。

    's', 't', 'u', 'f', 'f', ' ', '"', <CTRL-V>, <ENTER>, <CTRL-V>, <CTRL-D>, '"'
    

ファイルを転写せずにダウンロードした場合、これらの問題は発生しない可能性があります。

また、bindkey -m ^fは と同じではありませんbind f。また、コマンドを にバインドすることもありません^g

  • bindkey -m ^fコマンドを にバインドし<CTRL-f>ますが、コピー モードの場合のみです。
  • bind f<CTRL-A> fすべてのモードで、コマンドを にバインドします。
于 2009-07-13T17:53:40.793 に答える