Arch使用一个月经验杂谈

0.关于重要文档丢失

  本来这篇文章应该是从”1.关于文档编辑器”开始的,可是不幸的我非常不幸地按下了那代表不幸的按键”shift+delete”。不幸(ふこう)だ!T T~~~~~

  理所当然我使用数据恢复手段,测试了两种据说可靠的数据恢复工具。可是一不小心失去的东西又怎么能那么容易回来,我不出意料地迎来了一个最终找不到文件的结局。世界再一次用警告的手段告诉我,必须珍惜一切的一切,唉……
  “往者不可谏,来者犹可追。已而,已而!”经过这一疫,得出了以下几点总结:
  1) 绝不可再以“未命名”当作文件名,第一这个不利于数据恢复,第二这个容易误删,论坛灌水的时候有句俗语,叫“标题一定得长~~~~~~~~~~~”.txt
  2) 绝不可再习惯性地shift+delete,一定要养成delete的习惯,回收站不是当摆设的。
  3) /home分区独立于/分区之外,对于数据恢复好处非常大
  4) 安装testdisk以后有一条photorec命令可以用来恢复数据,之后检索用grep -rHn "<pattern>" *

1.关于文档编辑器

  我想linux下的编程用的编辑器实在是很多,而且大多都是世界顶尖级的神软,大概可以像圆周率的小数部分一样无限地持续下去。曾经有这样一句话:“世界上一共有三种文本编辑器,emacs、vi(vim)和其他。”很可惜,我是菜鸟一个,只会用其他。emacs和vim我用起来都不是很顺手,我只是想找一个类似Win下EmEditor那样方便的软件,支持多语言编码、支持多种换行符、支持多种代码高亮、操作上手简便的文本编辑器。可是emacs和vim在上手上都不是那么轻易的。在试用了N款编辑器软件之后,我选择了medit。官方简介只有这么短短的一句:“A GTK text editor”,但是我真的蛮喜欢这个5M多的小家伙。且听我介绍一番。
  首先,它支持多语言编码重新载入,分为“西欧、东欧、东亚、东南/西南亚、中亚、Unicode”六大类,每一类都有对应的各国编码,不过没有根据国别自动选择的功能。当然保存的时候也可以选择编码,不过它不支持HEX载入,无法查看16进制源文件。然后,它对Unix/Windows/Mac的换行符支持切换,但是没有清楚地标记在保存框上,UTF-8的BOM没有办法清楚地选择有无,所以保存相关的默认行为我并不是很清楚。至于高亮方面,则和EmEditor比较像,比较简洁,支持种类繁多但是不是很极致地注重美感,整体代码染色比较清爽。最后,它还支持toggle bookmark,python控制台、终端、多标签、文件目录树、多文件字串查找。真的很不错一款编辑器,希望有更多人喜欢它。

2.关于输入法fcitx与ibus

  ibus重一点儿,问题多一点儿,效率低一点儿。但是毕竟是个多语言支持的框架,支持日文输入。fcitx正如它的名字一样(Free Chinese Input Toy for X),对中文输入支持比较好,但没办法输入其它语言。
  介于需求日文输入,我选择ibus,但ibus下的搜狗拼音和谷歌拼音我都用不了。前者似乎是放弃了开发,后者应该是ibus-googlepinyin的bug,作者的官网上一片报错,希望他早日修复。已知的一个bug是python2与python3的不兼容引起的:虽然aur版的谷歌拼音里没遇到这个问题,但如果自己编译的话会找不到遇到main.py执行错误。因为默认的python已经不是python2,变成python3了。说起python我还有点儿话说,且看下文看图器部分。

3.关于包管理pacman与yaourt

  二者很大的一个区别是yaourt不用sudo,而且染色比较好看XD。man里面可以看到大量的参数以实现极多的包管理功能,但是我还是觉得有必要记录一下常用的几个组合

$ yaourt -Syua #刷新全部包(ABS+AUR)
$ yaourt -Syua --devel #刷新全部包(ABS+AUR)以及正在开发的包(XXX-svn、XXX-git、XXX-hg)

  关于这个正在开发的包,我说点儿事,就是git包实际的版本号和yaourt查询到的版本号可能不一致。早上我发现我的gtkqq版本非常奇怪,比官方版本号整整新了1个多月,觉得太不可思议了,后来才意识到问题所在。

$ yaourt -S svn #想自己编译XXX-svn,得安装svn
$ yaourt -S git #想自己编译XXX-git,得安装git
$ yaourt -S mercurial #想自己编译XXX-hg,得安装mercurial

  你妹的!最后一个是什么东西啊,明明叫做hg,-S直接安装hg不行,-Ss搜索hg也找不到,查了半天才知道叫这个”妹求扰”,创始人Matt一定是化学学太好才给这玩意起个元素名,还耍帅用个形容词……更郁闷命令行还得用hg clone,你妹的!

$ yaourt -Ss <pattern> #查找源(ABS+AUR)里带有指定<pattern>的包
$ yaourt -Qs <pattern> #查找机器上已安装的包(ABS+AUR)里带有指定<pattern>的包
$ yaourt -Qi <pattern> #查看机器上已安装的<pattern>包的详细
$ yaourt -Ql <pattern> #查看机器上已安装的<pattern>包的安装位置

  问题就在这个上,这个字串的写法受到bash极大的制约,到现在我都没办法写出随心所欲的正则。因为bash的东西实在太多,我决心另开一篇文,届时请参考之。目前的解决方案是使用多次搜索代替正则,比如搜一遍”keypress”再搜一遍” press”以避免搜到一大堆的”compress”和”express”-_-

$ yaourt -Qt #查找机器上所有孤立的包
$ yaourt -Qe #查找机器上所有以“指定”形式安装的包
$ yaourt -Qd #查找机器上所有以“依赖”形式安装的包
$ yaourt -Qte #查找机器上所有以“指定”形式安装的孤立包
$ yaourt -Qtd #查找机器上所有以“依赖”形式安装的孤立包,并选择是否删除

  值得注意的是最后一条,因为各种AUR依赖写的不全,好多编译需要的包比如cmake我那是装了删,删了装,好不累人……而且编译完mplayer2-git以后好多库的依赖居然都没了,结果导致我现在再也不敢乱qtd了……顺便说句拉丁文里面Q.E.D.是证明完毕的意思,每次打这些命令我都联想到这个……

4.关于终端

  一开始装Arch选择桌面环境的时候,因为图省事就装了LXDE。我当时选择WM和DE的条件很简单,看wiki上翻译的种类,越多文种的翻译代表该平台使用的越广,得到的支持也就越好。所以我一下子就选中了openbox,随即选中了LXDE,之后便开始使用了它默认的终端LXTerminal。之后第一件事我就开始了搜索terminal,然后我发现了一个叫做sakura的终端很不错,右键可以很轻易地定制很多界面上的东西,而且对剪切板的支持也很好,然后我就把lxterminal卸了。
  直到蒋座跟我推荐urxvt,以及把他的配置给了我,我才意识到sakura确实有些不足的地方,比如启动有些偏慢,界面的自定义也并不是那么完全,它的染色只能用一个palette的值来指定,而可以选择的值只有”tango、linux、xterm、rxvt”四种,最最别扭的是那个丑陋不堪的标签栏,让我坚决不想开第二个标签。但毕竟sakura是我自己选择的软件,而且陪我走过了一段不短的时间,所以即使我大部分时间都转向了urxvt,也没有想要卸掉它的意思,偶尔看看它有没有更新也不错。
  再来就是urxvt了,首先说目前我觉得最最不足的地方,远程支持的染色会消失,因为我不怎么使用vim服务器也经常不装emacs,所以暂时没有办法研究解决方案。之后说说urxvt的配置,整个配置依赖.Xdeaults文件。蒋座的方法是写一个.Xresources保存完整配置,然后建一个.Xdefaults链接指向.Xresources。我觉得这方法很好,立马依葫芦画瓢建立了个/usr/bin/python的链接指向/usr/bin/python2,来解决python2、python3冲突问题。至于urxvt的染色配置,我就不细说了,网上随便搜搜都一大堆介绍。我说点儿特别的,如何让urxvt支持标签以及剪贴版。
  urxvt的tab支持,启用perl扩展:tabbed

$ <editor> ~/.Xresources 
!extensions
URxvt.perl-ext-common:	default,...,tabbed,...

!URxvt.tabbed
URxvt.tabbed.tabbar-fg: 2
URxvt.tabbed.tabbar-bg: 0
URxvt.tabbed.tab-fg:    3
URxvt.tabbed.tab-bg:    0

  urxvt的剪贴板支持,首先安装urxvt-clipboard,再简单启用perl扩展:clipboard

$ yaourt -S urxvt-clipboard
$ 编辑器 ~/.Xresources
!extensions
URxvt.perl-ext-common:	default,...,clipboard,...

  这个剪贴板支持是这样的,不用ctrl+c,终端里选中之后自动把选中内容复制到主区PRIMARY和剪贴板区CLIPBOARD(linux的剪贴板管理请自行wiki)。之后如果你在终端外选中别的什么字串,会覆盖主区PRIMARY,但是剪贴板区依然是终端内容,所以可以直接ctrl+v到任意窗口。
  urxvt还有一个特性是alt+s,可以查找上面屏幕里出现的某个字串,找到第一个以后用上下箭头键可以切换查看搜索到的不同位置的其它匹配字串,ESC退出搜索,虽然不能直接选中匹配项,但其实还是蛮方便的。
  最后再来一条,该死的缓冲行数修改:URxvt.saveLines:65535,不解释!

5.关于图片:看图器、图片编辑器、截图器

  我真的试用了很多软件,我把extra和community仓库里的带有viewer的软件试了个遍,本来这一段写了很长的,可惜我现在已经找不回来了,只能简单写写,先说看图器。
  gpicview:LXDE默认带的看图器,主界面就是一张图,下面有工具条,类似Windows默认那个。基本编辑功能上算是尚可,唯独不支持剪贴板操作。滚动条上有些bug,经常是一开图就看到两个别扭的滚动条。
  gqview:参考geeqie
  geeqie:gqview的改版,图片自适应较好。有个可隐藏的侧边预览;启动有些偏慢,编辑功能比gpicview还弱,支持部分的自定义快捷键。
  mirage:中规中矩,没觉得有太大的特色,有个侧边预览,编辑功能尚可,不支持剪贴板,不支持快捷键自定义。
  gthumb:目前发现的最好的看图器,编辑功能强,支持剪贴版,但仅支持小键盘1-9为快捷键的宏定义。
  xv:奇葩软件,界面像xemacs,每太多尝试。
  mcomix:看漫画的软件,类似windows下的mangameeya与comicsview,属于专用王道软件,没有编辑功能。
  最后我就选用了gthumb为主力,辅以mcomix。
  
  图片编辑器我装了gimp,传说中linux下的photoshop,不过我目前没有P图的兴致,所以也没怎么试。
  
  截图器又可以好好说说了,又是一个难以寻觅佳软的活儿。
  scrot:命令行的强软,绑定快捷键以后非常高效,但是缺点是不支持子窗口控件截图。
  gscreenshot:scrot的壳,而且非常地难看,一点儿用没有……
  ksnapshot-git:功能不错但依赖繁琐,装好以后还一个劲儿的报错。
  shutter:很重,插件过多,但是功能确实非常强大,支持窗口子控件截图,还能得到窗口标题作为文件名(目前选中此物使用中)。   

6.字体配置

  不知道多少人不敢安装轻量级桌面的原因是怕配置字体,至少我就是一个。linux下字体配置的问题那简直就是刀山血海,引无数好汉败阵而逃……凡是自配置桌面能把字体美化这一点折腾到极致的,在我眼里都是英雄。我这里只是退而求其次,不求美化,只是顺眼而已。其实我也没干什么,只不过发现了一个神站点,文泉驿的在线字体配置页【linux用户猛击这里】。泪流满面啊,TVT,终于可以自己决定字体替换顺序了,还把sans、serif、mono分的那么清清楚楚,感激涕零啊,TVT。下面是我机器上一共手动安装的字体一览,全部装自yaourt。

$ yaourt -Qs "wqy|ttf"
extra/sdl_ttf 2.0.11-1
    A library that allows you to use TrueType fonts in your SDL applications
extra/ttf-arphic-ukai 0.2.20080216.1-3
    Kaiti (brush stroke) unicode TTFonts
extra/ttf-arphic-uming 0.2.20080216.1-3
    CJK Unicode font Ming style
extra/ttf-bitstream-vera 1.10-8
    Bitstream vera fonts
extra/ttf-dejavu 2.33-1
    Font family based on the Bitstream Vera Fonts with a wider range of characters
local/ttf-ms-fonts 2.0-9
    Core TTF Fonts from Microsoft
extra/ttf-sazanami 20040629-7
    Japanese fonts
community/wqy-bitmapfont 0.9.9-8
    A bitmapped Song Ti (serif) Chinese font
local/wqy-microhei 0.2.0_beta-2
    A Sans-Serif style high quality CJK outline font.
community/wqy-zenhei 0.9.45-2
    A Hei Ti Style (sans-serif) Chinese Outline Font.
7.PDF阅读器

同样我也试了很多款,列举如下
  apvlv:貌似挺流行的vim风pdf阅读器,但是似乎ABS里那个对中文支持不太好……
  ePDFViewer:LXDE官方wiki推荐的PDF阅读器,但是俺无数次被“装载……”搞到郁闷。
  xpdf:这个大概就属于重量级软件了,一个字,卡,这下我算是搞懂了x开头的软件都是一个风格的灰色界面。
  mupdf:目前觉得最快的pdf阅读器了,界面像个看图器,什么都没有。快捷键挺多的,不过还算很方便。
  zathura:自动保存上次打开的页面这一点挺方便的,操作风格类似vim,熟悉vim的人可以试试。

然后说点儿mupdf操作相关,翻译自man mupdf

  h, j, k, l:  vim风,依次左、下、上、右方向滚动页面(如果可以滚)
  +, -:放大或者缩小
  w:缩放窗口大小以适合图像
  r:重新载入文件
  . pgdn right space:下一页
  , pgup left b:上一页
  <, >:向后、向前跳翻十页
  m:为本页做一个书签(重启后无效)
  t:跳回上一个书签。
  [0-9]m:把本页存入指定的0-9号书签寄存器。
  [0-9]t:读取指定的0-9号书签寄存器里的书签并跳往该处。
  123g:跳到123页。
  /:字串查找。
  n, N:查找下一个。
  c:关闭/开启彩色显示。
8.PS1

应要求贴个神PS1……

获取分支名的函数……

function find_git_branch {
    local dir=. head
    until [ "$dir" -ef / ]; do
        if [ -f "$dir/.git/HEAD" ]; then
            head=$(< "$dir/.git/HEAD")
            if [[ $head == ref:\ refs/heads/* ]]; then
                git_branch=" ${head#*/*/}"
            elif [[ $head != '' ]]; then
                git_branch=' (detached)'
            else
                git_branch=' (unknown)'
            fi
	    echo $git_branch
            return
        fi
        dir="../$dir"
    done
    git_branch=''
} 

目前在用的,标题栏和提示符都显示一大串东西……

PS1='\[\e]2;[\u @ \h]─[\A]─[\w]─[\!] $(find_git_branch)\a\]\n\[\e[0;36m\]┌─[\[\e[1;35m\]\u\[\e[1;34m\] @ \[\e[1;35m\]\h\[\e[0;36m\]]─[\[\e[1;34m\]\A\[\e[0;36m\]]─[\[\e[1;34m\]\w\[\e[0;36m\]]─[\[\e[0;31m\]\!\[\e[0;36m\]] \[\e[1;34m\]$(find_git_branch)\n\[\e[0;36m\]└─[\[\e[0m\]\$\[\e[0;36m\]] \[\e[0m\]'

仅标题栏显示一大串东西,提示符[$]……

PS1='\[\e]2;[\u @ \h]─[\A]─[\w]─[\!] $(find_git_branch)\a\e[0;36m\][\[\e[1;37m\]\$\[\e[0;36m\]] \[\e[0m\]'

仅提示符显示一大串东西,标题栏为默认……

PS1='\n\[\e[0;36m\]┌─[\[\e[1;35m\]\u\[\e[1;34m\] @ \[\e[1;35m\]\h\[\e[0;36m\]]─[\[\e[1;34m\]\A\[\e[0;36m\]]─[\[\e[1;34m\]\w\[\e[0;36m\]]─[\[\e[0;31m\]\!\[\e[0;36m\]] \[\e[1;34m\]$(find_git_branch)\n\[\e[0;36m\]└─[\[\e[0m\]\$\[\e[0;36m\]] \[\e[0m\]'