「fish」シェルを実際に使うために

以前紹介した「fish」シェル。
使ってみたいと思われる方の参考として、私の「config.fish」を置きます。
よろしければ叩き台としてどうぞ。
インストール方法とかは、以前の記事「fishfish」をご覧ください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
##
# LOGIN Definition
##
if status --is-login

 # For Japanese
 set -gx LANG ja_JP.UTF-8
 set -gx LESSCHARSET utf-8
 set -gx JLESSCHARSET japanese-utf-8
 set -gx MANPAGER "less -isr"
 set -gx PAGER "lv -c"
 set -gx EDITOR Vim

 # Info関係
 set -gx TERMINFO /usr/share/terminfo
 set -gx INFOPATH /opt/local/share/info /usr/local/share/info /usr/share/info .

 # PATHを一度保存
 set -l path_list
 for i in $PATH
  if not contains $i $path_list
   set path_list $path_list $i
  end
 end

 # path_helperで本来のPATHを取得
 set -l path_helper (echo (/usr/libexec/path_helper -c) ¦ sed -e "/\:/s// /g" -e "/\"/s///g" -e "/\;/s///g")
 eval $path_helper

 # fishのPATHを追加する
 for i in $path_list
  if not contains $i $PATH
   if test -d $i
    set PATH $PATH $i
   end
  end
 end

 # For MacVim (ctagsとVimを優先するため前置)
 set -gx PATH /Users/Shared/Data/Editor/MacVim/MacVim.app/Contents/MacOS $PATH

 # For Python 2.7
 set -gx PATH $PATH /usr/local/share/python
 set -gx PYTHONPATH $PYTHONPATH /usr/local/lib/python2.7/site-packages
 set -gx HGENCODING UTF-8

 # For Ruby 1.9
 set -gx PATH $PATH /usr/local/opt/ruby/bin

 # For Node Package Manager
 set -gx PATH $PATH /usr/local/share/npm/bin

 # For User (一時的な実行ファイル置き場とする)
 set -gx PATH ~/bin $PATH

 # よく使うディレクトリ
 set -l cd_path_list
 set -l cd_path_helper (echo set cd_path_list (cdpath_helper -c))
 eval $cd_path_helper

 # fishのCDPATHを設定する
 set CDPATH . ~
 for i in $cd_path_list
  if not contains $i $CDPATH
   if test -d $i
    set CDPATH $CDPATH $i
   end
  end
 end

 # 環境変数にも展開する
 set -gx CDPATH $CDPATH

 # For screen
 set -gx SCREENDIR ~/.screen

 # For AquaTerm
 set -gx AQUATERM_PATH /Users/Shared/Applications/Terminal/AquaTerm.app

 # For Clozure CL
 set -gx CCL_DEFAULT_DIRECTORY /Users/Shared/Data/Lang/ClozureCL-1.7

 # For node
 set -gx NODE_PATH /usr/local/lib/node_modules

 # For Groovy
 set -gx GROOVY_HOME /usr/local/opt/groovy/libexec

 # For DocBook
 set -gx XML_CATALOG_FILES /usr/local/etc/xml/catalog

 # For Grails
 set -gx GRAILS_HOME /usr/local/opt/grails/libexec

 # for fdclone
 set -gx FD_LAST_PATH_FILE ~/.fd_last_path_file

 # Convert aliases for BASH/ZSH/KSH/MKSH/CSH/RC
 if test -f ~/.fish.aliases.common
  # for BASH/ZSH/KSH/MKSH
  echo -n > ~/.sh.aliases.common
  sed -e "/function/s//alias/" -e "/\; /s//=\'/" -e "/ \$argv\; end/s//\'/" < ~/.fish.aliases.common >> ~/.sh.aliases.common
  # for CSH
  echo -n > ~/.csh.aliases.common
  sed -e "/function/s//alias/" -e "/\; /s// \'/" -e "/ \$argv\; end/s//\'/" < ~/.fish.aliases.common >> ~/.csh.aliases.common
  # for RC
  echo -n > ~/.rc.aliases.common
  sed -e "/function/s//fn/" -e "/\;/s// \{/" -e "/ \$argv\; end/s// \$\* \}/" -e /\"/s//\'/g < ~/.fish.aliases.common >> ~/.rc.aliases.common
 end
end

##
# User Definition
##

#
# http://brettterpstra.com/2013/02/09/quick-tip-jumping-to-the-finder-location-in-terminal/
#
# cd to the path of the front Finder window
function cdf
    set -l target (osascript -e 'tell application "Finder" to if (count of Finder windows) > 0 then get POSIX path of (target of front Finder window as text)')
    if test -d "$target"
        cd "$target"; pwd
    else
        echo 'No Finder window found' >&2
    end
end
function f
    open -a Finder ./
end

#
# for autojump
#
function j
   cd (command autojump $argv)
end

#
# Read Z extension
#
if test -f /opt/local/etc/z.fish
    . /opt/local/etc/z.fish
end

#
# for fdclone
#
function fd
   fd $argv; cd (cat $FD_LAST_PATH_FILE)
end

#
# for man page
#
function eman
   env LANG=C man $argv
end
function jman
   env LANG=ja_JP.UTF-8 man $argv
end
function whatis
   env LANG=ja_JP.UTF-8 man -f $argv ¦ nkf -w
end
function apropos
   env LANG=ja_JP.UTF-8 man -k $argv ¦ nkf -w
end

#
# for more easy
#
function l;  ls -Gwa $argv; end
function ls; ls -Gw $argv; end

##
# Read user's aliases
##
if test -f ~/.fish.aliases.common
    . ~/.fish.aliases.common
end

このファイルを、「~/.config/fish/config.fish」として保存します。

ほとんど今まで紹介してきたものばかりなので問題ないと思います。
とは言え、私はいろんなものを試すためにいろんな設定を入れていますので、実際に使用されてるものに置き換えてくださいね。

「autojump」の設定は以前の記事「autojump」にも書いていますが、「fish_prompt.fish」への追記が必要です。
以下のファイルを、「~/.config/fish/functions/fish_prompt.fish」として保存してください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# Set the default prompt command. Make sure that every terminal escape
# string has a newline before and after, so that fish will know how
# long it is.

function fish_prompt --description "Write out the prompt"

 # Just calculate these once, to save a few cycles when displaying the prompt
 if not set -q __fish_prompt_hostname
  set -g __fish_prompt_hostname (hostname¦cut -d . -f 1)
 end

 if not set -q __fish_prompt_normal
  set -g __fish_prompt_normal (set_color normal)
 end

 switch $USER

  case root

  if not set -q __fish_prompt_cwd
   if set -q fish_color_cwd_root
    set -g __fish_prompt_cwd (set_color $fish_color_cwd_root)
   else
    set -g __fish_prompt_cwd (set_color $fish_color_cwd)
   end
  end

  echo -n -s "$USER" @ "$__fish_prompt_hostname" ' ' "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" '# '

  case '*'

  if not set -q __fish_prompt_cwd
   set -g __fish_prompt_cwd (set_color $fish_color_cwd)
  end

  echo -n -s "$USER" @ "$__fish_prompt_hostname" ' ' "$__fish_prompt_cwd" (prompt_pwd) "$__fish_prompt_normal" '> '

 end

 # for autojump
 autojump -a $PWD > /dev/null &

 # for z.fish
 z --add "$PWD"

end

このファイルは、配布されている「/usr/local/share/fish/functions/fish_prompt.fish」をコピーして、「autojump」(40〜41行目)と「z.fish」(43〜44行目)の設定を追加したものです。
「z.fish」については次に紹介したいと思っていますが、もし入れられてないなら、44行目はコメントアウトにしておいてください。

あと、「config.fish」の最後に読んでいる「~/.fish.aliases.common」もサンプルとして置いておきます。

目的上、シェルに依存しないものばかりですし、私のお試し用に入れている物が多いので、あまり参考にならないかもしれませんが、「rlwrap」や「open」とか、その他いろんな言語関係のお話はまたいずれ。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
##
# Aliases file for User
##

#
# for more easy
#
function c; clear $argv; end
function h; history $argv; end
function julia; /opt/julia-ba9eb0a653/julia $argv; end
function pcsv; /opt/csv8.4/bin/ta6osx/scheme -b /opt/csv8.4/boot/ta6osx/petite.boot $argv; end
function s; /usr/local/bin/shtool $argv; end
function vim; Vim $argv; end

#
# add rlwrap
#
function basic; rlwrap /Users/Shared/Data/Lang/ChipmunkBasic/basic $argv; end
function bigloo; rlwrap /usr/local/bin/bigloo $argv; end
function cbmbasic; rlwrap /usr/local/bin/cbmbasic $argv; end
function ccl; rlwrap /Users/Shared/Data/Lang/ClozureCL-1.7/scripts/ccl64 $argv; end
function chibi-scheme; rlwrap /usr/local/bin/chibi-scheme $argv; end
function clj; rlwrap /usr/local/bin/clj $argv; end
function clp; rlwrap /usr/local/bin/clp $argv; end
function coqtop; rlwrap /usr/local/bin/coqtop $argv; end
function csi; rlwrap /usr/local/bin/csi $argv; end
function ecl; rlwrap /usr/local/bin/ecl $argv; end
function fansh; rlwrap /usr/local/bin/fansh $argv; end
function gist; rlwrap /opt/local/bin/gist $argv; end
function gosh; rlwrap /usr/local/bin/gosh $argv; end
function gp; rlwrap /usr/local/bin/gp $argv; end
function gs; rlwrap /usr/local/bin/gs $argv; end
function guile; rlwrap /usr/local/bin/guile $argv; end
function jstalk; rlwrap /usr/local/bin/jstalk $argv; end
function kawa; rlwrap java -jar /opt/kawa/share/java/kawa.jar $argv; end
function lisp; rlwrap /usr/local/bin/lisp $argv; end
function luajit; rlwrap /usr/local/bin/luajit $argv; end
function metalua; rlwrap /usr/local/bin/metalua $argv; end
function mosh; rlwrap /usr/local/bin/mosh $argv; end
function nmosh; rlwrap /usr/local/bin/nmosh $argv; end
function ocaml; rlwrap /usr/local/bin/ocaml $argv; end
function qexo; rlwrap java -jar /opt/kawa/share/java/kawa.jar --xquery $argv; end
function racket; rlwrap /usr/local/bin/racket $argv; end
function rhino; rlwrap /usr/local/bin/rhino $argv; end
function sbcl; rlwrap /usr/local/bin/sbcl $argv; end
function scheme48; rlwrap /usr/local/bin/scheme48 $argv; end
function scsh; rlwrap /usr/local/bin/scsh $argv; end
function sq; rlwrap /usr/local/bin/sq $argv; end
function symphony; rlwrap /usr/local/bin/symphony $argv; end
function tcltk; rlwrap /System/Library/Frameworks/Tk.framework/Versions/8.5/Resources/Wish.app/Contents/MacOS/Wish $argv; end
function yorick; rlwrap /opt/local/bin/yorick $argv; end

#
# open Mac Gui
#
function aptana; open -a AptanaStudio3 $argv; end
function cot; open -a CotEditor $argv; end
function emacs22; open -a Emacs22 $argv; end
function emacs23; open -a Emacs23 $argv; end
function emacs24; open -a Emacs $argv; end
function freemat; open -a FreeMat $argv; end
function intellij; open -a "IntelliJ IDEA 12 CE" $argv; end
function mi; open -a mi $argv; end
# function mvim; open -a MacVim $argv; end
function netbeans; open -a "NetBeans 7.2.1" $argv; end
function pcalc; open -a PlainCalc $argv; end
function reduce; open -a iTerm /usr/local/lib/reduce/20110414/reduce $argv; end
function scilab; open -a "scilab-5.3.3" $argv; end
function sublime; open -a "Sublime Text 2" $argv; end
function tcalc; open -a TCalc $argv; end
function texmacs; open -a iTerm /usr/local/bin/texmacs $argv; end
function wxmaxima; open -a wxMaxima $argv; end
function xcode; open -a Xcode $argv; end
function yacas; open -a Yacas $argv; end

#
# open Windows Apps
#
function excel; open -a "Microsoft Office Excel" $argv; end
function vivi; open -a "vivi" $argv; end
function word; open -a "Microsoft Office Word" $argv; end

最後にくっついている「open Windows Apps」は「VMware FUSION」を利用しています。
気にしないでくださいな〜。

 

「fish」シェルを実際に使うために」への1件のフィードバック

  1. ピンバック: 「z」と「z-fish」と「sh/ksh」版 | VivaFan通信

コメントをどうぞ