<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>loyaqua (Loy)</title>
    <link>https://ruby-china.org/loyaqua</link>
    <description></description>
    <language>en-us</language>
    <item>
      <title>开始 zsh 最小化配置</title>
      <description>&lt;p&gt;oh-my-zsh 用久了总感觉有点臃肿，时不时还需要更新（不觉得这玩意需要经常更新），我只需要精简的无需（经常）变动的 zsh 配置，或许我只是个控制狂，正如我不喜欢 rvm 而用 chruby 那样。&lt;/p&gt;

&lt;p&gt;zsh 本身已经很强大了，只不过默认功能都是关闭的而已。一些精简的框架比如 prezto 和 pure 所做的也只是打开了一部分默认功能（还有一个漂亮的 prompt）。&lt;/p&gt;

&lt;p&gt;备份和删除所有 zsh 相关配置，编辑 .zshrc 开始配置：&lt;/p&gt;

&lt;p&gt;Tab 补全&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;autoload -Uz compinit &amp;amp;&amp;amp; compinit # 打开默认补全功能
setopt complete_in_word         # 光标在词中间也补全
setopt auto_menu                
setopt autocd                   # 输入文件夹名直接 cd 进去
ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&amp;amp;' # 删除补全生成多余 space
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;ls、ll、la&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# 解决 Linux 和 macOS 的 ls 选项不兼容
ls --version &amp;amp;&amp;gt;/dev/null
if [ $? -eq 0 ]; then
    lsflags="--color --group-directories-first -F"
else
    lsflags="-GF"
    export CLICOLOR=1
fi

alias ls="ls ${lsflags}"
alias ll="ls ${lsflags} -l"
alias la="ls ${lsflags} -la"
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;git 相关&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;alias gd="git diff"
alias gs="git status 2&amp;gt;/dev/null"
function gc() { git clone ssh://git@github.com/"$*" }
function gg() { git commit -m "$*" }

# !!!以下只适用于 macOS !!! ，按 gto 直接从命令行调用浏览器打开项目主页
function gto() { git remote -v | awk '/origin.*push/ {print $2}' | xargs open }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;根据自己实际需要的功能一步步增加配置，这个过程也能思索哪些是必要的，发现增加一些方便的功能。&lt;/p&gt;</description>
      <author>loyaqua</author>
      <pubDate>Thu, 13 Aug 2020 17:01:40 +0800</pubDate>
      <link>https://ruby-china.org/topics/40277</link>
      <guid>https://ruby-china.org/topics/40277</guid>
    </item>
    <item>
      <title>使用 ctags 增强 Ruby 项目的阅读和补全体验</title>
      <description>&lt;blockquote&gt;
&lt;p&gt;ctags 能为多种编程语言的源代码生成 tags 缓存。  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;我用的是 ctags 的一个 alternative，只能用于 ruby 源代码的 ripper-tags，用法大致相同。&lt;/p&gt;

&lt;p&gt;安装：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gem install ripper-tags
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;在 ruby 项目根目录下运行 ripper-tags -R 就能生成一个 tags 缓存，“-R”显然是搜索子目录，默认适用于 vim 可用的格式，如果你用其他编辑器可能需要调整生成格式，选项“-e”生成 emacs 可用的格式。&lt;/p&gt;

&lt;p&gt;一个在 rails 项目中生成 emacs 可用 ctags 缓存的示例：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ripper-tags -eR --exclude=.git --exclude=tmp --exclude=public --exclude=app/assets
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;接下来就能使用你自己编辑器支持的 ctags 插件和功能了，我用的是 emacs，默认支持 ctag，我额外安装 counsel-etags
简单配置：&lt;/p&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;(use-package counsel-etags
  :ensure t
  :bind (("C-]" . counsel-etags-find-tag-at-point))
  :init
  (add-hook 'prog-mode-hook
        (lambda ()
          (add-hook 'after-save-hook
            'counsel-etags-virtual-update-tags 'append 'local)))
  :config
  (setq counsel-etags-update-interval 60)
  (push "build" counsel-etags-ignore-directories))
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;把光标移到代码的 tag 里按“ctrl + ]”搜索对应 tag：
&lt;img src="https://l.ruby-china.com/photo/2020/5810b13a-1005-4e9d-84d1-6afd594b8109.png!large" title="" alt=""&gt;&lt;/p&gt;

&lt;p&gt;如果你已经安装了补全插件 company，无需配置，company-etags 会自动识别你根目录下的 tags 文件增强补全功能。&lt;/p&gt;</description>
      <author>loyaqua</author>
      <pubDate>Thu, 13 Aug 2020 16:00:39 +0800</pubDate>
      <link>https://ruby-china.org/topics/40275</link>
      <guid>https://ruby-china.org/topics/40275</guid>
    </item>
    <item>
      <title>顺手建了个 discord 群</title>
      <description>&lt;p&gt;最近不少技术群往 discord 跑，我也顺手建了个 ruby 中文群，目前还没人说话&lt;img title=":grin:" alt="😁" src="https://twemoji.ruby-china.com/2/svg/1f601.svg" class="twemoji"&gt; &lt;/p&gt;

&lt;p&gt;邀请链接&lt;img title=":link:" alt="🔗" src="https://twemoji.ruby-china.com/2/svg/1f517.svg" class="twemoji"&gt;是 &lt;a href="https://discord.gg/jQ9yQ9g" rel="nofollow" target="_blank"&gt;https://discord.gg/jQ9yQ9g&lt;/a&gt;&lt;/p&gt;</description>
      <author>loyaqua</author>
      <pubDate>Thu, 06 Aug 2020 14:15:01 +0800</pubDate>
      <link>https://ruby-china.org/topics/40243</link>
      <guid>https://ruby-china.org/topics/40243</guid>
    </item>
    <item>
      <title>理解 Cookie</title>
      <description>&lt;p&gt;Cookie 就像你在会所办理的消费卡，Session 就是会所前台对你做的登记信息。&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;会所通过这张卡来识别你，任何人拿着你这张卡，或者复制你的卡到店消费，都可能消费你卡里的钱。&lt;/li&gt;
&lt;li&gt;假如你忘记带卡，或者遗失了，你必须通过输入 username 和 password，或者手机认证、邮箱认证等办法来验明正身。&lt;/li&gt;
&lt;li&gt;这张卡有有效期限。或者几天，或者几十年。&lt;/li&gt;
&lt;li&gt;这张 4kb 的卡 Cookie 能保存你的一些信息，从而让会所能为你提供更好的个性化服务。比如你喜欢正规按摩还是多人运动、一个月消费几次、一般周几过来，等等。&lt;/li&gt;
&lt;li&gt;用卡对你和会所来说都很方便，速度快。你不用花时间验明正身，前台也是拿卡过机就完事。&lt;/li&gt;
&lt;li&gt;一张卡只能用于一家会所，或者它的分店。&lt;/li&gt;
&lt;li&gt;会所（服务端）对以上所有操作保留最终解释权。&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>loyaqua</author>
      <pubDate>Mon, 20 Jul 2020 19:54:21 +0800</pubDate>
      <link>https://ruby-china.org/topics/40180</link>
      <guid>https://ruby-china.org/topics/40180</guid>
    </item>
  </channel>
</rss>
