2009-07-13 94 views
1

我不确定以下Rampion's code的确切用途。 它应该显然在光标位置执行命令。无法理解.screenrc中的代码

# 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 

我得到一个新的缓冲,使得

alt text http://files.getdropbox.com/u/175564/screen-rampion.png

什么命令的目的是什么?

回答

2

因此,该命令不会运行任意代码。如果您的光标位于单词<whatever>的上方,它将在新窗口中运行man <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'标题::在新窗口中运行此命令,而不是打开默认的shell新窗户。
    • /bin/sh ::一个shell程序
    • -c 'cat | xargs man || read' ::运行给定的字符串作为脚本,而不是在交互模式开放
    • cat | ::等待用户输入(以一个换行符和CTRL-结束d),然后通过管道作为用户输入的下一个命令
    • xargs man ::调用man,使用任何的FROM标准输入作为命令行参数读取man
    • || read ::如果先前的命令返回非零值,等待用户键入回车

从你的输出,它看起来像

  1. 命令的-c部分没有得到运行,因为它看起来像一个新的外壳($是一个提示)。
  2. stuff "^M^D"部分未被正确转录。 paste '.'之后的下一个非注释行应输入,按键的键击,如:

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

如果你有downloaded the file,而不是转录,你可能不会有这些问题。

另外,bindkey -m ^fbind f不相同。既不将命令绑定到^g

  • bindkey -m ^f将命令绑定到<CTRL-f>,但仅限于在复制模式下。
  • bind f在所有模式下将命令绑定到<CTRL-A> f
+0

@rampion:谢谢你的回答! – 2009-07-13 19:22:22

+0

你的意思是说,如果你始终在Screen的复制模式下使用命令,你不需要命令'copy'? ---我一直只在屏幕的复制模式下使用这些命令。 *在屏幕的复制模式之外使用这些命令的主要好处是什么?* --- *你怎么做到的?* – 2009-07-13 19:32:51

+0

好吧,光标并不总是在复制模式之外的txt结尾。在vim中,当使用readline等时,光标可以指向各种文本。所以我选择让我的命令能够直接在这些情况下工作,而不必先切换到复制模式。 – rampion 2009-07-13 20:14:02