Tuesday 18 October 2016

recurcat - 循环高亮

Bash  代码:
#recursvie which access subdir/*, use {,**/}*, rf: http://stackoverflow.com/questions/1690809/what-expands-to-all-files-in-current-directory-recursively
#shift, rf: http://askubuntu.com/questions/521192/how-to-pass-wildcard-to-path-parameter-of-find-command-via-a-variable-in-scr
function recurcat () { 
    [ -z "$2" ] && echo "Missing 1st arg [Usage: recurcat extension (don't use single quotes bcoz nid expand)path] e.g. recurcat java **/*.java " && return 1;
    shopt -q globstar && : || {                                                                                                                                                                                    
        echo "globstar not enabled. Simply run again it will works or put it in ~/.bashrc for permanent change." && shopt -s globstar && return 1
    };
    lang="$1";
    shift;
    find "$@" -type f -exec bash -c 'echo; echo -e "\e[41m Filename: \e[40m\e[93m {}"; tput sgr0; echo' \; -exec bash -c "highlight -O xterm256 -S "$lang" {}" \;
}


使用方法

C 例子:


Python 例子:


Java 例子:


注:

[0] 安装方式:把那个 bash 代码放在 ~/.bashrc 文件, source ~/.bashrc 后即可享用,比煮杯面还快哟~

[1]  recurcat python *.py, python 是程序语言名字, py 是文件后缀。代码没有处理自动检测, 毕竟有些文件如 ~/.bashrc 也不是 .sh 后缀, 所以我觉得不重要。不局限于代码,如果是普通文件也是可以用的(高亮数字好看很多),只要程序语言放 sh 即可。

[2] recurcat python *.py 只搜索当下目录, recurcat python **/*.py 则搜索循环目录。

[3] 确保你有安装 highlight utility 先。

[4] 使用这个命令(或任何命令)的时候,不需要重新输入,只要你 bash history size 够大(我的是 unlimited),只需输入 recu 再按 Page Up 很轻易就可以重新使用命令。

[5] 当然,也要调整 Terminal scrollback,我本人是调 100000 行。

[6] 用 Shift+Page Up/Down 在 terminal 快速上下浏览。

[7] 如果你要把文件名的红色改成其它颜色,如青色,就把最后一行那个 41m 换成 42m。

[8] 不局限于当前目录和全部目录, 你完全可以发挥你的 regex 想象力,比如说用 recurcat c ./*m*.c 只找当前目录含有字眼的文件, 如 ./myls.c , 或 recurcat c **/*m*.c 搜索全部目录含有 m 字眼的文件。这也是为什么我不打算把这个代码改成接受 parameter 的原因,regex 应该是用户自己输入的。

[9] 如果想改代码的输出颜色, 用 `touch /tmp/dummy.c; strace -ff -e open highlight -O xterm256 -S c /tmp/dummy.c` 命令即可找出相关 config 文件。

[10] 如果代码能改进,欢迎留言哟~


No comments:

Post a Comment