• #5 楼 @knwang

    可能是我的需求太怪了吧。我希望比较一个项目内任意两个 SHA1 或者 分支,或者 INDEX, 不是使用 单个文件逐个打开' 的方式, 而是首先以目录结构的方式, 显示所有文件的改动, 然后我再查看我感兴趣的文本内容`, 这样一目了然。

    我上一张图解释下:

  • #1 楼 @Saito

    谢谢,你写的太棒,太详细了!!!

    不过有一点貌似不对,也是之所以我有这个问题的缘故,引用 Progit 中的一段话:

    You can create your own tree. Git normally creates a tree by taking the state of your staging area or index and writing a tree object from it. So, to create a tree object, you first have to set up an index by staging some files. To create an index with a single entry — the first version of your text.txt file — you can use the plumbing command update-index.

    你把建立树对象的这个步骤延后到提交 commit 之后,但是应该是 add 之后,这个树对象已经存在了。只不过不是以 objects 下 可见的形式存在的。但是 git 有办法获取他的 sha1 (这里指的是那个入口), 否则,git diff --cached, 就没办法工作了。我觉得一定有一个 sha1, 也许就在那个 .git/index 文件内。

    我理解错了,哈哈~~ 我又细细看了下,貌似就是你说的那样~~ 👍

    再说下之前的需求,以前 git diff 总是以 `单文件' 的形式,打开代码比较工具,常常是打开一堆 TAB, 一点都不直观,我要这个 SHA1, 最初,我是希望通过 git archive 的方式,打包成 tar, 然后直接比较 tar 文档的目录结构,一目了然。不过后来发现,获取 index 以及 获取当前目录下的文件 (所有被索引文件以及除去所有被 ignore 文件这两步不太好搞), 所以,最后我干脆用拷贝到临时目录的形式来实现了。所以这个需求也就解决了。

    #3 楼 @knwang

    不行,无效的 SHA1

  • #1 楼 @ch3n #2 楼 @reus

    我设定了一个 $TMP_DIRECTORY 变量,指向了这里,不过也就是有些小脚本放点临时文件啥的。严重缺乏利用呀。

  • #41 楼 @ranmocy

    你试试就知道了,更改快捷键,在 tty1 启动,然后,到 tty2, 新开一个 emacsclient, 看看原来的键位是不是仍旧有效?当时我试了半天这是唯一的解法。虽然现在已经不在 tty1 下面玩了,不过也懒得删除。几十个快捷键映射,也不会搞得太慢,可以接受呀。基本上秒开。

  • #39 楼 @ranmocy

    我早忘了为什么这样,但是一定是必须的。

    可能是最初我用 Emacs, 实在文本 Terminal 下,就是 Ctrl-Alt-1, Ctrl-Alt-2 下面,不这样搞一下,切换到一个新的下面,又恢复成原样了。

  • #37 楼 @ranmocy

    初衷,其实仅仅是为了保证所有的快键在所有的 frame 下一致。(包括在多个不同的文本 Terminal 下)

    就是一个键盘 map 的映射,例如:

    
    (define-key key-translation-map [(meta o)] [(super o)])
    

    所有针对 meta o 的 按键序列,都转移到 super o, 然后,在所有模式下,都可以保证按下 meta o, 是我所需的那个快捷键。

  • #1 楼 @anklos

    太玄幻了,接受不了。

    帮助里说了:

    
    The most common way to use Xiki is from a text editor.  For
    example, from in a text editor, typing "tables" on any blank line
    and then double-clicking on it (or typing control-enter or
    command-enter) to browse and update your mysql database.
    
  • #35 楼 @ranmocy

    我试了好多,最后才明白过来,原来 awesome 之类的东西根本就是用来取代其他 Windows Manager 的。所以我还是觉得算了,就用 XFCE4 , 虽然 Thunar 稍显简单,就这么凑合用吧。

    after-make-frame-functions 我加了好多东西,包括 键位映射, 设置字体, 启动窗口最大化等等。

  • #19 楼 @knwang

    你的回复我必看,每次都让我学到很多很多东西 !!

    👍

  • #47 楼 @hysios

    楼主是一个让我佩服的人,很早的时候,我记得楼主给代码让我至今印象深刻。

    不过对于 Mac , 楼主可能并不了解 Linuxer 所说的问题在那里。

    首先对一句话表示不解:

    只喜欢用 Mac 自带的 Terminal,功能足够够用了,我的效率非常的高,因为我把精力都放在工作上,而不是配置上,我不需要太多的功能,我只要一个简单的操作环境,这样我更能专注于工作,软件并不需要太多复杂的功能,那些都是累赘,简化人的操作,不正是软件最初的目地吗?
    

    给我的感觉,你是一个关注于 真是效率,然后喜欢 CLI 的人,如果如你所说,更专注于工作,而且喜欢 CLI, 那么 Linux 谁说不是更好的选择呢?大把的图形界面,华丽胡哨的东西,只会让你分心,让你去娱乐,让你去陶醉。

    1. 我猜测最大的问题是:苹果底层使用的不是 Linux, 而是 FreeBSD, 这也就罢了,貌似,苹果专注的地方并不是让 FreeBSD 更多的去兼容 Linux, 而是在 GUI 方面提供更好的 Feeling. 这是作为一个 Unix Like 开发人员期望看到的吗?毕竟你不是普通使用者。

    2. Linux 和 FreeBSD 我估计已经有很多的不同了,大多数开源软件都是 Linux 下开发的。我不相信,把 Linux 下面的一个包,拿到 Mac 编译有你说的那么方便。苹果那么自大的公司,怎么可能把其他自大的大神的东西 (我指的 Linus 和 Stallman), 更何况 (据说,我没验证), Mac 版的 FreeBSD 已经和传统的 FreeBSD 差别已经很大了吧。

    当然你要非说 且图,Photoshop , 甚至优秀的第三方软件 之类的,Mac 当然好了,不过,就不在于程序员写代码 这个范畴了。

    最后结论是:如果关注于 Mac 开发的生态链,那当然非 Mac 不用了。如果你非要用 Linux 下原生的东西,例如 C 而不是 Object C, 甚至是 Ruby 而不是 MacRuby, 如楼主这样专注于开发效率的人,至少没有任何理由说:Mac 比 Liunx 好太多!, 因为如果如你所说,两者效率应该一样,甚至 Linux 会给你更多,更纯粹,让你更专注于工作的选择。

    BTW: 还有一个个人的选择,就是习惯小红点。

    谁敢说对于纯开发人员来说,小红点效率比 Mac 的触摸板差?至少我八个指头,几乎不用离开 ASDF JKL; ...

  • #2 楼 @feitian124

    奉献也会令人快乐
    

    +1

  • #6 楼 @knwang

    说得太好了,认可~

  • #10 楼 @jjym

    耐不住数量大,写个博客,你用上 100 个 gem, 我不信你不冲突。

  • 靠,有关递归的描述,我前几天刚发过一个贴,讨论。

    很明显,我之前就属于那种:

    对递归的效率也有很大的误解,认为递归没有循环来得高效。
    
  • 我觉得 rails 中,尤其是 大把的 gem 中,很多都是 新瓶装老酒, 这是一个很严重的问题。屁大点功能,就是一个 gem, 这对于 Rails 初学者很不利。

    来来回回 gem 之间的依赖,组合,再加上彼此之间的冲突,所花的时间,其实有时候远比自己来实现花的功夫多。当然,我指的是那些 小gem, 当然有很多很不错的 gem, 功能强大,经过严格测试,不过不太少了。

  • #5 楼 @doitian

    嗯,很明显 perl 是模仿 sed. 哈哈

    刚刚看了半天,觉得还是不改了,改成 sed 实现,要么就得自己写 s#...#...#g, 要么就只能用正则表达式,不方便,还是 Ruby 比较爽。

  • #3 楼 @doitian

    哈。说了半天,Ruby 是模仿 sed , 刚刚看了下 man, 连使用方式都一样...

  • #1 楼 @bhuztez

    啊?sed 可以实时替换么?

    我以为 sed 只可以将替换后结果输出到标准输出 ?

    正好给讲下,怎么实时替换 ??

  • 又是王垠,在我刚开始用 Emacs 那会儿,搜索中文 Emacs 资料,时常会看到这个名字。

  • #31 楼 @tudou

    重新编辑了下 #29 楼

  • #23 楼 @dotnil

    这作者联系不上,汗~~

  • #26 楼 @ugoa

    你如果在 Window 下用,Emacs Server 是无效的。

    如果在 Linux 或 Mac 下,Emacs Server 就是先启动一个 Emacs Deamon, 然后稍后运行 Emacs 不是通过 Emacs 这个命令了,因为 Emacs 作为一个 Deamon 已经被启动了,只需要运行任意多个 emacsclient 连接到那个 Emacs server 就可以启动一个 Emacs 窗口,最大的优势是:秒开, 速度可比 Vim 快多了。

    Emacs23 之前最让人诟病的一个原因是 Emacs 启动慢,不过现在变成优点了. 前面讲的不准确,之前这个最大的缺点在 Emacs23 之后就不再存在了,相反,因为 daemon 的缘故,启动速度非常快,反倒成为 Emacs 的优点了

  • #24 楼 @doitian

    嘿,我在 21 楼 说的问题,不知道描述清楚没有?

    不知道能否通过改 second-sel 源码实现一个全局的 secondary-kill-ring ?

    代码请看: http://emacswiki.org/emacs/second-sel.el

  • #20 楼 @5long

    写了,等会儿我挨个儿试一遍,呵呵。

    我其实并不是要一个完整的 Windows Manager, 我现在用 XFCE 挺好,我其实只是想有个办法,让当前窗口 左右重排,上下重排,来个预览啥的。

  • #18 楼 @reus 个人表示,只要找对E文的关键字, Google 结果就没有压力...

    有时候,找关键字不是那么容易呀。毕竟又不是中文,就算中文,还不一定找到呢。

    #19 楼 @doitian 好一阵子都常见你上线,貌似最近有空呀?

    正好向几位请教一个还算蛮棘手的问题:@willmouse @doitian @reus

    现在我 C-w 快捷键,是复制内容到 secondary-region-ring,(就是和 kill-ring 一样的另一个 ring) 这其中使用了一个插件叫做:second-sel.el 来实现的一个 ring, 之所以这样绑定,是因为:C-w 之后,可能还会有 backward-kill-word, kill-line 之类的操作,这个时候,我可以不受干扰的通过一个自定义快捷键 C-M-y, 来直接粘帖 secondary-region 中的内容。

    现在问题是:secondary-region-ring, 只要一退出 buffer, 再重新打开,ring 里面的内容就没有了。有时候,我希望复制一段内容到 second-region-ring 当中,哪怕我退出 buffer, 但是在稍后的其他新打开的 buffer 当中,都可以被 反复的 通过 C-M-y 粘帖。

    反正就这么个功能,正常的删除,粘帖,就用 kill-ring, 但是最好有一个 其他的 (全局的)ring, 专门使用 C-M-y 来粘帖, 目前我用的这个 second-sel.el 中,这个 secondary-region-ring 不是全局的。只要一退出 buffer, 内容就消失了。

    我要解决的问题是:

    1. 如果我希望更改 second-sel.el , 将那个 local ring 改为 global ring , 思路该如何解决?(最好谁有空帮我改下也行,如果能实现的话)

    2. 类似需求你们是如何处理的?是否有其他插件?或者自己写的插件?我想遇到一个 需要反复粘帖的情形,没有人愿意没完没了的 M-y 去吧?

  • #15 楼 @reus

    我去看下... 太谢谢啦。

    p.s. 为什么你们知道这么多资源...

  • #12 楼 @willmouse

    貌似你说的那个 awesome 应该就是,我曾经想安装,不过貌似 Slackware 不满足的依赖太多了... 我不想因为这个小工具,再装一堆东西,呵呵,所以没装。

  • #9 楼 @willmouse

    没问题呀。可是无法完全发挥 Server 的优势,如果不是 Terminal, 也就用不到 dvtm 之类的东西了。

    不过只开一个终端也有好处,就是不太乱,像我,有时候在一个桌面下开 EmacsClient 太多,头就晕了。

    #10 楼 @reus 我最近才开始用 tabbar, 不过只是在 shell-mode 下 才开启。换多个 shell 方便一些。

    对了,问下你们,在 X-windows 下,用一个快捷键,将当前打开的所有 Windows , 上下对齐重排,或者左右重排,类似的软件叫什么。最好是独立于 具体的 Windows 管理器,就像 Xbindkeys 一样,不管 KDE, 还是 Gnome, 又或者 XFCE, 都可以用。

  • @reus @willmouse

    然 Emacs 个人使用方式非常多样化,不过咱们大家还是应该多多沟通呀,上次其他帖子中 @reus 的提示,帮我解决了 shell-mode 下的几个大问题。

  • #6 楼 @reus #5 楼 @willmouse

    Terminal 下也没什么不妥,就是有些快捷键 (个人特殊的), 在终端下面,好像有具体的绑定,无法单独使用。

    另外,习惯问题吧,我觉得使用 GUI 可以更好的发挥 deamon 的效果,这点应该没有异议吧?

    你们使用 Terminal, 习惯上应该是 大部分 Emacs 操作 都在同一个 Emacs 界面 下面运行的吧?要大量的借助 ido, helm 之类的软件,切换文件什么的。我是经常运行一大堆 Emacs GUI (frame), 然后 Alt + Tab 切换 ( Windows 过来的习惯 ), 当然 ido 也用。

    总之我觉得在 Terminal 下使用 Emacs, 纯粹发挥不出来 Emacs Server 的好处,和在 Windows 下使用 Emacs 基本上没有啥差别,要开一个新的 Emacs 界面,还得首先开一个新的 Terminal, 是这样的吧?

    我估计你们都是 Emacs 老用户吧,应该在 Emacs 22 的时候就在用了 (Emacs 22 不支持 daemon) , 所以会有现在的习惯,不知道我猜测的对吗?