LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
楼主: aegean sea

问有关于界面问题

[复制链接]
发表于 2009-6-28 21:59:35 | 显示全部楼层
最近比较忙,只要开电脑就玩实况……呵呵
这个问题确实比较棘手……如果不怕麻烦的话,用 fc (builtin)命令吧

fc -p   把当前的历史纪录压到栈中

fc -l    看一下,当前的历史纪录就空了
似乎 fc -l 是等同于 history 的……

这时 cd 到其它地方
fc -P (大写的) *出刚才的命令
可以 fc -l  看一下

已知的问题:
fc -p 压栈之后,不能用 hist (我弄的那个),fc -P *出后才可以用

有时间研究下这个问题 :p
回复 支持 反对

使用道具 举报

发表于 2009-6-28 22:01:29 | 显示全部楼层
那个字是  “弓单”
回复 支持 反对

使用道具 举报

发表于 2009-6-28 22:22:49 | 显示全部楼层
[php]
chpwd() {
#   fc -W                                       # write current history  file   #   "setopt INC_APPEND_HISTORY"
    HISTFILE="$HISTDIR/${PWD//\//:}"            # set new history file
    [[ ! -e "$HISTFILE" ]] && touch $HISTFILE
    fc -p -a                       #########压栈,调用结束后自动*出
    local ohistsize=$HISTSIZE
        HISTSIZE=0                              # Discard previous dir's history
        HISTSIZE=$ohistsize                     # Prepare for new dir's history
    fc -R                                       # read from current histfile
}
[/php]
加了一行……
有点头晕,我大致描述下,兄弟试试看看:
对于 fc 命令(包括 history)来说,只有一个历史纪录,不过只是临时的,退出就消失了
(如果执行的命令比较多,不知道会不会影响性能,每次 chpwd 都要把所有命令从栈里踢进踢出的……)
如果想查看单个目录下的纪录,用 hist 。也就是说,历史纪录文件还是各管各的

有什么问题再说吧,如果这个比较实用俺就改配置文件了
回复 支持 反对

使用道具 举报

发表于 2009-6-28 23:01:36 | 显示全部楼层
重启后临时历史纪录会消失($HISTFILE  文件中的不会消失,可以用 hist 查看),这个在预料之中
比较恼人的是,它会先读入 $HOME 目录下的纪录……大致如下:

~ :   1 2 1 2
Desktop : 3 4 3 4
history : 1 2 1 2 3 4 3 4
hist (~) : 1 2 1 2
hist (Desktop) : 3 4 3 4
init 6
hist (~) : 1 2 1 2
hist (Desktop) : 3 4 3 4
history : 1 2 1 2
回复 支持 反对

使用道具 举报

发表于 2009-6-28 23:18:27 | 显示全部楼层
fc -p [ -a ] [ filename [ histsize [ savehistsize ] ] ]
似乎可以写到一个文件中……经过又一次的重启……没有成功

研究下 zshaddhistory() 这个 hook ……
回复 支持 反对

使用道具 举报

发表于 2009-6-29 00:25:47 | 显示全部楼层
平均重启了百十来次,都开始强行检查磁盘了……终于齐活了 ;p
原来 zsh  本来就有这功能,而且这次的更简单,也不用考虑烦人的细节;chpwd() 还可以改造成其它功能,真是暴力啊暴力
[php]
#每个目录使用独立的历史纪录
HISTDIR="$HOME/.zhistory"
    [[ ! -d "$HISTDIR" ]] && mkdir -p "$HISTDIR"
HISTFILE="$HISTDIR/global"
    [[ ! -f "$HISTFILE" ]] && touch $HISTFILE

zshaddhistory() {
    print -sr -- ${1%%$'\n'}
    fc -p $HISTDIR/${PWD//\//:}
}

function allhistory { cat $HISTDIR/:* }

function convhistory #没变

function histall #没变

function hist { convhistory $HISTDIR/${PWD//\//:} }

function top55 #没变

alias -g history='history -fi'  #把 history -fi 绑定一下 [/php]

fc history 和原来的一样一样的,查找、上翻之类的操作也非常正常
相当于额外给每个目录增加了一个历史纪录,用 hist 查看


兄弟试试这个有什么问题没?要是没有我把 wiki 上面的改成这个
回复 支持 反对

使用道具 举报

发表于 2009-6-29 03:56:40 | 显示全部楼层
Post by kardinal;2001890
最近比较忙,只要开电脑就玩实况……呵呵
这个问题确实比较棘手……如果不怕麻烦的话,用 fc (builtin)命令吧

fc -p   把当前的历史纪录压到栈中

fc -l    看一下,当前的历史纪录就空了
似乎 fc -l 是等同于 history 的……

这时 cd 到其它地方
fc -P (大写的) *出刚才的命令
可以 fc -l  看一下

已知的问题:
fc -p 压栈之后,不能用 hist (我弄的那个),fc -P *出后才可以用

有时间研究下这个问题 :p
我说呢,怎么都不更新了。
回复 支持 反对

使用道具 举报

发表于 2009-6-29 04:19:44 | 显示全部楼层
呃,现在的情况是这样的:
多创建了一个global文件记录所有的命令。
在各目录记录该目录下的命令。
翻页或者C-r的时候遍历所有命令。。。相当于没有那分目录的东西,只有hist是可以在当前目录查看所用命令。。。
何解?
回复 支持 反对

使用道具 举报

发表于 2009-6-29 08:04:52 | 显示全部楼层
这就没办法了 -_-|||| 要想在不同目录下执行相同的命令,就必须让纪录在所有目录下都能访问,而这样就得将所有纪录放在一起

要不只能按原来那样,如果想执行相同命令,在 chpwd 之前 fc -p,然后再 fc -P,可以给这两个命令绑定个快捷键什么的……不过原来的那个太麻烦了,不想改回去了

比较好的方法就是将全局的纪录操作和本地的分别绑定,比如全局的C-p ,本地的M-p……切换纪录上下文倒是可以实现,不过倒是有个地方比较棘手……俺看下可行不……
回复 支持 反对

使用道具 举报

发表于 2009-6-29 08:29:16 | 显示全部楼层
fc -R 可以切换,问题是怎么切回来

M-p 的时候检查 HISTFILE ,设成 $HISTDIR/${PWD//\//:}

[[ ! $HISTFILE=$HISTDIR/${PWD//\//:} ]] && $HISTFILE=$HISTDIR/${PWD//\//:}
[[ $HISTFILE=$HISTDIR/${PWD//\//:} ]] && fc -R

zshaddhistory 的时候可以加一个判断,只要当前操作和上一次不一样,就把 HISTFILE 设回global,这个也不难,关键是如何检测当前执行的zle命令和上一次执行的是否相同
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表