2016-04-08 15 views
1

So habe ich die if-Anweisung folgende (ursprünglich von meinem .zshrc):Probleme beim Schreiben Fisch if-Anweisung

if [ -n "${NVIM_LISTEN_ADDRESS+x}" ]; then 
    alias h='nvr -o' 
    alias v='nvr -O' 
    alias t='nvr --remote-tab' 
fi 

Jetzt habe ich in dem Hafen versuchen über diesen meine config.fish, ich verstehe, dass es mit dem zu tun ist die [ auf dem wenn aber ich kann die Syntax nicht ganz herausfinden.

Antwort

2

Die [ ist in Ordnung. Die beiden Teile, die sich in Fischen unterscheiden, sind der Erweiterungsmodifikator + x und die Schleifensyntax.

In zsh, "${NVIM_LISTEN_ADDRESS+x}" wertet x aus, wenn $NVIM_LISTEN_ADDRESS festgelegt ist, und andernfalls leer; dann wird das verglichen, um zu sehen, ob es leer ist. Dies scheint ein Umweg zu sein, nur um zu überprüfen, ob die Variable gesetzt ist.

In Bezug auf Schleifen enden Fischblöcke immer mit end, und es gibt keine Notwendigkeit für then oder do.

So ist dies der direkte Anschluss an Fisch:

if [ -n "$NVIM_LISTEN_ADDRESS" ] 
    alias h='nvr -o' 
    alias v='nvr -O' 
    alias t='nvr --remote-tab' 
end 

Und das ist mehr idiomatisches:

if set -q NVIM_LISTEN_ADDRESS 
    abbr h 'nvr -o' 
    abbr v 'nvr -O' 
    abbr t 'nvr --remote-tab' 
end 

, die den Fisch verwendet abbreviation feature, die an Ort und Stelle erweitert.

+0

Vielen Dank für eine so umfangreiche Antwort. –