selfhacking第六天

  starting!!

   准备从了解emacs的每一个常见的package及其用法开始,通过GitHub上的README文件和Google的方式。(这几天才发现英文是多么重要。)

   今天从一个emacs下的插件helm开始:

      Helm is an Emacs framework for incremental completions and narrowing selections. It provides an easy-to-use API for developers wishing to build their 
  own Helm applications in Emacs, powerful search tools and dozens of already built-in commands providing completion to almost everything.
      It is a must-have for anyone using Emacs as a main work environment.
  Helm has been widely adopted by many Emacs power-users. It is available in Melpa and can be easily installed from the Emacs package manager.
    这是GitHub上的对helm的描述,再吐槽一下我的英文水平。。对于incremental completions and narrowing selections.我的理解是更强大的补全功能和更有效的搜索功能。(这里的
completion和selection意思应该就是补全和搜索吧:)
     提到了关于helm和emacs自带的completion工具之间的区别:emacs是在minibuffer中用TAB键来进行补全,但是helm是在一个叫helm-completion-window的窗口中进行自动补全。
     Helm的强大在于它提供了十分便捷的API便于其他一些emacs插件和使用者来加强自己的特定工具。

    这是Google到的一篇blog,博主是一位lisp大神。

                        Why I Use Helm and Why You Should Too

       Helm is an extension package for Emacs that, among other things, hooks into many of the commands requiring user input and supplants them with
   a new command
that presents the user with a prompt AND an interactive list of options that is fuzzy matched to what is typed in that prompt.
      helm是一个hooks在其他命令上的extension。我的理解是,用户提供一个输入,helm会用一些比较模糊的和该输入相似的prompt来代替,这个很像搜索的定义,也很好的的解释了Document中
      incremental completions and narrowing selections的定义。。所以helm既可以单独使用:比如
       M-x helm-aproros是一个用来提示命令的功能:如果你想对emacs进行分屏,但不知道具体的命令,但你知道window和split这两个单词的意思,所以你就可以在helm-aproros后输入:window split。
  发现没有提示, 反过来试一下结果helm帮你找到了“split-window-right”!
       helm还有很多类似的功能,像helm-find-files等,这也让很多其他的插件变得很redundant。但是因为之前的教程中已经对我的配置做了较好的改进,所以helm简单的功能当然不能满足我的需求。
      好在helm更强大的地方在于它是一个framework,团队合作才是他的强项。
      我主要想在这篇blog中搞懂helm-ag的用法。众所周知,ag是Linux下最快速的搜索工具了,也是我self-hacking的第一个trying。 计划是首先查看ag的文档学会基本的适用方式,然后在去GitHub上查看
关于helm-ag的基本用法,然后对我的emacs进行配置。

        
                                AG.Documentation

 一般的Linux发行版本都自带grep而不是ag和ack。这里有一篇关于这三个工具的比较。

  ag 的优势:

  • 命令短。AND you can filter by file type, edit results inline and find files。
  • 和 ack 以及 git grep 一样,默认会忽略掉你通常不想看的文本(二进制文件、被版本控制系统忽略掉的文件),重点是还可以自定义忽略文件。
  • C 编写的,比 ack 更快!
 这是关于AG.el的Documentatin。

 ag是在Linux,Mac和Windows下的使用工具,所以可以直接在shell下使用命令进行搜索,但他也提供了emacs的版本,有AG.el。如果想直接使用该文件(我肯定不会这么用:),那可以直接下载然后使用.
因为搜索函数是autoload的,也就是说是在invoking函数的时候,该文件会随着函数一起被加载,不需要写(require ‘ag)。
    

*/

   在我最早的配置文件中使用的是counsel/ivy搜索工具,helm-ag貌似更酷更快。

   而且迄今为止我发现的搜索工具已经有三个了:helm-ag, helm-swiper, swiper。而且这些搜索工具都即可以进行单个buffer中搜索,也可以进行multiple-buffers-searching。

              

     About Usage!!

  1. ag是一个搜索工具,可以直接在shell下用ag +candicate来进行搜索工具,便可以在当前目录中进行搜索。

    2.helm-ag  

    helm-ag.el provides interfaces of The Silver Searcher with helm.

    

    helm-ag:是最基本的使用方式,是在当前目录下进行搜索。M-x helm-ag 后按回车键+搜索内容+enter键。便会有结果出现。

    helm-ag-this-file:用法和helm-ag一样,只不过是在当前buffer中进行搜索,然后将结构返回到result-widow中。

    helm-do-ag:是在当前目录中针对文件的查找,不是针对某一个buffer。

    helm-do-ag-this-file:是在当前buffer中对该buffer中的内容进行查找。

    还有一些和工程相关的查找方式,现在也用不到。

    不过我经过测试,发现之前使用的swiper,在显示上确实没有helm-ag更醒目。下面是比较的图片,swiper是将所有的内容都display,但是helm-do-ag是仅仅将candidate显示。   

                                             

                

  所以我决定使用helm-do-ag来作为我的搜索工具。

  当然,现在还没有进开发的门,所以有效的工程搜索不用,只用上述的两个最简单的工具。

2 
3 第一个在当前目录下寻找,针对内容。
4 (global-set-key (kbd "C-c p s") 'helm-ag) 
5   
6 第二个是在当前buffer中进行寻找,针对内容。
7 (global-set-key (kbd "C-s") 'helm-do-ag-buffers)
8 
9 */

  刚开始使用的效果还不错,不过又发现一些问题:

      1.因为之前的spiwer在搜索的时候直接打开一个minibuffer,然后输出内容。但是helm-do-ag-this-file是在一个很窄的地方输入,很不爽。所以以往以后搞懂counsel/ivy的机理,看是否能够hacking一个好看的

searching-wndow。

      2.第一次hacking,发现英文和码字的重要性。后续会逐渐提高。

  这段时间一直在搞编辑器,实际上还是有一些害怕,因为好的武器应该由优秀的内功来使用。但是我的算法和代码量一直很弱,加上计划上出的事故。最近又开始担心开了。但应该相信“功到自然成”。我在emacs上的投资一定不会错。

  而且要学会正确的学习和使用emacs,这段的时间和经验都是很宝贵的,所以要经常复习这方面的知识。在此基础上,希望接下来的时间都花在算法和基本功上,代码量上去了,cmake,helm-project-root等一些技术就都可以放开手去做了。

  所以,假期剩下的时间应该抓一些算法和Coding了。计划继续。

  

原文地址:https://www.cnblogs.com/haotianmichael/p/8436806.html