邪恶的 eshell

标签: News | 发表时间:2011-10-16 19:18 | 作者:Kardinal ndv
出处:http://linuxtoy.org


对于一个经常“被跨平台”的人来说,Windows 下没有一个好用的 shell,不能不说是一个 遗憾。

虽然说 bash zsh 都有 windows 的版本,但几乎一无是处……此处暂省略1000字,且不说应有 尽没的功能,光是那速度就让人抓狂,动不动装死,让人想撞死,还不如 eshell 来的机灵……等等, eshell 不就是天生跨平台的 shell 么?

废话不多说,这回先上图

eshell 够坏的,shell 里面能用 outline,我还真不知道有别的 shell 或者 editor 能够做到……淘气!

当然,仅仅一个 outline mode 还不能称得上 evil ,eshell 里面可以同时使用 shell 和 elisp 两种语言。

cmd $(elisp)
$(shell-command-to-string "cmd")
$ 不是必须的,甚至最外层的括号也可以省略,不过据说可能会出问题

eshell 还有变态的修饰器和文件类型断言

echo *(:U) => ("BAR" "BIN/" "DEV/" "ETC/" "FOO" "HOME/" "LIB/" "TMP/" "USR/" "VAR/")
(:U) 括弧中以冒号开头的是修饰器,表示转换为大写。

echo *(^/) => ("bar" "foo")

(^/) 就是文件类型断言了,/ 表示文件夹,前面的 ^ 表示 非

echo ("foo" "bar" "baz" "foo")(:gs/foo/blarg/)
=> ("blarg" "bar" "baz" "blarg")

是不是有点眼熟?请自由联想……需要注意的是,修饰器和文件类型断言要紧跟在列表的后 面。你没有看错,前面例子中的 * 不是列表,从哪个角度看都不是,但它爸是 eshell,所以它叫通配符

如果想了解更多修饰器和文件类型断言的信息,M-x eshell-modifier(predicate)-alist 不过符号是用数字表示的,理解起来有一定难度,点那个 customize 的链接。

下面又到了每月一次的配置文件时间

首先绑定一个快速启动 eshell 的快捷键,我绑定的是 C-x C-x 。如果想多开,加个前缀 参数就可以了,比如 C-u C-x C-x 。

(add-hook 'eshell-mode-hook (lambda()
           (outline-minor-mode 1)
           (color-theme-my-eshell)
           (setq outline-regexp "^[^#$\n]* [#>]+ "
                 scroll-margin 0
                 eshell-scroll-to-bottom-on-output t
                 eshell-scroll-show-maximum-output t)
           (add-to-list 'eshell-output-filter-functions 
                        'eshell-postoutput-scroll-to-bottom)
           (def-key-s eshell-mode-map 
             "<up>"     'eshell-previous-matching-input-from-input
             "<down>"   'eshell-next-matching-input-from-input
             "<tab>"    'user-tab
             "<return>" 'user-ret)
))

尽管 eshell 也有 autocd 的功能,就是输入目录回车,自动cd;不过我还是习惯空行按 tab 补全 cd ,那样比较一致。

(defun user-tab ()
  (interactive)
  (let ((input (eshell-get-old-input)))
    (if (string-equal input "")
        (insert-string "cd ")
      (progn
        (cond
         ((string-equal input "cd  ")
          (insert-string "
")) ((string-equal input "cd --") (delete-backward-char 2) (insert-string "+")) ((string-equal input "cd +-") (delete-backward-char 2) (insert-string "-")) (t (pcomplete)) )))))

狠了狠心,我又加了一个 user-ret 。男人嘛,就应该对 Shell 狠一点

(defun user-ret ()
  (interactive)
  (let ((input (eshell-get-old-input)))
    (if (string-equal input "")
        (progn
          (insert-string "ls")
          (eshell-send-input))
        (eshell-send-input)
        )))
这个函数的作用是,空行按回车自动 ls,狠不狠?

下面是一些基本设置,不解释

(setq eshell-save-history-on-exit t eshell-history-size 512 eshell-hist-ignoredups t eshell-cmpl-ignore-case t eshell-cp-interactive-query t eshell-ln-interactive-query t eshell-mv-interactive-query t eshell-rm-interactive-query t eshell-mv-overwrite-files nil ;; aliases-file 里面不能有多余的空行,否则会报正则表达式错误 eshell-aliases-file (expand-file-name "_eshell/eshell-alias" init-dir)

      eshell-highlight-prompt   t
      ;; 提示符设置,下面两项必须对应起来,
      ;; 否则会报 read-only,并且不能补全什么的
      eshell-prompt-regexp      "^[^#$\n]* [#>]+ "
      eshell-prompt-function    (lambda nil
                                  (concat
                                   (abbreviate-file-name
                                    (eshell/pwd))
                                   (if
                                       (=
                                        (user-uid)
                                        0)
                                       " # " " >>> ")))
)

作为一个有时间观念的人,我需要知道每一个命令花了多少时间。。。其实我总觉得 eshell 有点慢,这样心里感觉踏实一点 -__-!!!

(add-hook 'eshell-load-hook
          (lambda()(setq last-command-start-time (time-to-seconds))))
(add-hook 'eshell-pre-command-hook
          (lambda()(setq last-command-start-time (time-to-seconds))))
(add-hook 'eshell-before-prompt-hook
          (lambda()
              (message "spend %g seconds"
                       (- (time-to-seconds) last-command-start-time))))

设置一些常用的命令

(defalias 'ff 'find-file)
(defalias 'ee (lambda()(find-file (expand-file-name "44eshell.el" init-dir))))
(defalias 'aa (lambda()(find-file eshell-aliases-file)))
(defalias 'rr (lambda()(find-file (expand-file-name "qref.org" sand-box))))
(defalias 'ss  'shell-command-to-string)

差点忘了,auto-complete 设置

;; 自动开启 ac-mode
;; 需要 (global-auto-complete-mode 1)
(add-to-list 'ac-modes 'eshell-mode)
(setq ac-sources '(;; ac-source-semantic
                   ;; ac-source-yasnippet
                   ac-source-files-in-current-dir
                   ac-source-filename
                   ac-source-abbrev
                   ac-source-words-in-buffer
                   ;; ac-source-words-in-all-buffer
                   ac-source-symbols
                   ac-source-imenu))

还有胡乱收集的一些小函数

(defun eshell/ii (file)(ido-find-file file))
(defun eshell/ed (file1 file2)(ediff-files file1 file2))

;; 按一次 C-a 到命令在前面,再按一次到命令提示符的前面,感觉用处不大 (defun eshell-maybe-bol () (interactive) (let ((p (point))) (eshell-bol) (if (= p (point)) (beginning-of-line))))

(defun eshell/gvim (&rest args) "Invoke find-file' on the file. \"vi +42 foo\" also goes to line 42 in the buffer." (while args (if (string-match "\\\+\([0-9]+\)\'" (car args)) (let* ((line (string-to-number (match-string 1 (pop args)))) (file (pop args))) (find-file file) (goto-line line)) (find-file (pop args)))))

分类: News | 永久链接 | 收藏到 del.icio.us | Email 给好友 | 8 评论 | 捐助本站

相关 [邪恶 eshell] 推荐:

邪恶的 eshell

- ndv - LinuxTOY
对于一个经常“被跨平台”的人来说,Windows 下没有一个好用的 shell,不能不说是一个 遗憾. 虽然说 bash zsh 都有 windows 的版本,但几乎一无是处……此处暂省略1000字,且不说应有 尽没的功能,光是那速度就让人抓狂,动不动装死,让人想撞死,还不如 eshell 来的机灵……等等, eshell 不就是天生跨平台的 shell 么.

Google:天真还是邪恶?

- tossking - 爱范儿 · Beats of Bits
不是所有人都喜欢 Google,读完 Steven Levy 的《In The Plex》也未必能够改变他们的观点. 在许多人看来,Google 无非是一个商业公司,更糟糕的是,无非是一个广告公司,一个以出售用户数据获利的公司,一个垄断了搜索行业进而压迫同行的企业,一个虚伪的公司,一个邪恶帝国. 当 Google 给了 Mozilla 一大笔钱的时候,你可以想象人们会有什么样的想法.

邪恶的“喜欢(Like)”文化

- Sinan - 36氪
如果你碰巧正在网上读这篇文章,你可能注意到右上角有腾讯的喜欢按钮,也有人人的喜欢按钮,现在停下来,先点两下喜欢. 谢谢,我现在感觉好多了,被人喜欢的感觉总是很不错的. 不要忘记在文章下边评论,或是在微博转发这篇文章. 如果你人品好,右上角的 +1 按钮也有显示出来,那么别忘了也 + 我们一下. 实际上,如果你到现在为止不想把这篇文章读完,至少在点击其他页面之前在这里停留几秒,这样我们网站的分析工具将会显示你读完了整篇文章.

邪恶的蘑菇家族[8p]

- jason - 煎蛋
艺术家Mike Puncekar 利用马里奥中蘑菇家族为原型,创作了一批邪恶版本的蘑菇家族,当然,他们在游戏中都是坏蛋的角色,所以Mike 将他们画得更加欠揍了. @oioi:这一点让我想起之前COD僵尸版本就非常受欢迎,有人分析说因为普通的COD射杀敌军人类或多或少有负罪感,而将敌军改成僵尸,就觉得这玩意是该死的.

宇宙的邪恶轴心(上)

- XiangGuang - 科学松鼠会
人类从宇宙中获得的绝大部分信息来自于光. 人类从宇宙中获得的最古老的信息来自于宇宙中最古老的光. 这缕最古老的光有个专门的名字,叫做微波背景辐射(Cosmic Microwave Background 简称CMB). 微波背景辐射给我们讲述了宇宙小时候的许多故事,其中最诡异的故事莫过于宇宙的邪恶轴心了.

邪恶的“喜欢(Like)”文化

- Archon - 东西
如果你碰巧正在网上读这篇文章,你可能注意到右上角有腾讯的喜欢按钮,也有人人的喜欢按钮,现在停下来,先点两下喜欢. 谢谢,我现在感觉好多了,被人喜欢的感觉总是很不错的. 不要忘记在文章下边评论,或是在微博转发这篇文章. 如果你人品好,右上角的 +1 按钮也有显示出来,那么别忘了也 + 我们一下. 实际上,如果你到现在为止不想把这篇文章读完,至少在点击其他页面之前在这里停留几秒,这样我们网站的分析工具将会显示你读完了整篇文章.

“邪恶的Ebay”:死巫婆拍卖网

- Jessica - 互联网的那点事
摘要:有这样一家拍卖网,一台47英寸的LG彩电,成交价只有230多块人民币;一个售价1100美元的尼康相机46美元成交,或一台售价1300美元的惠普笔记本电脑104美元就能到手……. 有这样一家拍卖网,一台47英寸的LG彩电,成交价只有230多块人民币;一个售价1100美元的尼康相机46美元成交,或一台售价1300美元的惠普笔记本电脑104美元就能到手…….

AKB邪恶歌曲TOP10 比AKB的歌还要邪恶的东西,或许没有了吧

- 令狐补充 - 天朝娱乐 | 每天开心一下!
AKB邪恶歌曲TOP10 比AKB的歌还要邪恶的东西,或许没有了吧. 723动车追尾记录,多摘自微博,欢迎补充~我是天朝临时工~. 723温州动车事件遇难者之一中国传媒大学陆海平的人人网最后状态. 【723乘客自述】就算我在D301上没被撞死,在高架桥上走4个多小时没被闪电霹死,最后被安置坐动车回家还得被气死.

我要毁了你们的童年(暴力邪恶黄,慎入)

- 瀚轩 - 有意思吧
        这些回忆中的动画人物,看看被改变了以后成了神马样子. 真是把童年给毁掉了,有木有啊,有木有. ————————————很黄很暴力很邪恶的分割线————————————. 查看详情评论:我要毁了你们的童年(暴力邪恶黄,慎入). 本文原始链接:http://www.u148.net/article/34117.html.