Mercurial > vim
diff src/ex_cmds.c @ 5867:a6b59ee633a3 v7.4.276
updated for version 7.4.276
Problem: The fish shell is not supported.
Solution: Use begin/end instead of () for fish. (Andy Russell)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 07 May 2014 15:10:21 +0200 |
parents | 8a3117a4887c |
children | aa99d04fa7e2 |
line wrap: on
line diff
--- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1551,8 +1551,16 @@ make_filter_cmd(cmd, itmp, otmp) { char_u *buf; long_u len; - - len = (long_u)STRLEN(cmd) + 3; /* "()" + NUL */ + int is_fish_shell; + +#if (defined(UNIX) && !defined(ARCHIE)) || defined(OS2) + /* Account for fish's different syntax for subshells */ + is_fish_shell = (fnamecmp(get_isolated_shell_name(), "fish") == 0); + if (is_fish_shell) + len = (long_u)STRLEN(cmd) + 13; /* "begin; " + "; end" + NUL */ + else +#endif + len = (long_u)STRLEN(cmd) + 3; /* "()" + NUL */ if (itmp != NULL) len += (long_u)STRLEN(itmp) + 9; /* " { < " + " } " */ if (otmp != NULL) @@ -1567,7 +1575,12 @@ make_filter_cmd(cmd, itmp, otmp) * redirecting input and/or output. */ if (itmp != NULL || otmp != NULL) - vim_snprintf((char *)buf, len, "(%s)", (char *)cmd); + { + if (is_fish_shell) + vim_snprintf((char *)buf, len, "begin; %s; end", (char *)cmd); + else + vim_snprintf((char *)buf, len, "(%s)", (char *)cmd); + } else STRCPY(buf, cmd); if (itmp != NULL) @@ -1577,7 +1590,7 @@ make_filter_cmd(cmd, itmp, otmp) } #else /* - * for shells that don't understand braces around commands, at least allow + * For shells that don't understand braces around commands, at least allow * the use of commands in a pipe. */ STRCPY(buf, cmd); @@ -4315,7 +4328,7 @@ do_sub(eap) pos_T old_cursor = curwin->w_cursor; int start_nsubs; #ifdef FEAT_EVAL - int save_ma = 0; + int save_ma = 0; #endif cmd = eap->arg; @@ -5986,7 +5999,7 @@ find_help_tags(arg, num_matches, matches "/\\\\?", "/\\\\z(\\\\)", "\\\\=", ":s\\\\=", "\\[count]", "\\[quotex]", "\\[range]", "\\[pattern]", "\\\\bar", "/\\\\%\\$", - "s/\\\\\\~", "s/\\\\U", "s/\\\\L", + "s/\\\\\\~", "s/\\\\U", "s/\\\\L", "s/\\\\1", "s/\\\\2", "s/\\\\3", "s/\\\\9"}; int flags; @@ -6026,7 +6039,7 @@ find_help_tags(arg, num_matches, matches /* Replace: * "[:...:]" with "\[:...:]" * "[++...]" with "\[++...]" - * "\{" with "\\{" -- matching "} \}" + * "\{" with "\\{" -- matching "} \}" */ if ((arg[0] == '[' && (arg[1] == ':' || (arg[1] == '+' && arg[2] == '+')))