mirror of
				https://github.com/vim/vim.git
				synced 2025-10-28 09:27:14 -04:00 
			
		
		
		
	runtime(sh): consider sh as POSIX shell by default
Also, do not set g:is_kornshell when g:is_posix is set. BSD shells are POSIX but many are derived from the ash shell. closes: #16939 Signed-off-by: Mohamed Akram <mohd.akram@outlook.com> Signed-off-by: Christian Brabandt <cb@256bit.org>
This commit is contained in:
		
				
					committed by
					
						 Christian Brabandt
						Christian Brabandt
					
				
			
			
				
	
			
			
			
						parent
						
							5753084042
						
					
				
				
					commit
					51a06ecee0
				
			| @@ -1,4 +1,4 @@ | ||||
| *syntax.txt*	For Vim version 9.1.  Last change: 2025 Mar 15 | ||||
| *syntax.txt*	For Vim version 9.1.  Last change: 2025 Mar 21 | ||||
|  | ||||
|  | ||||
| 		  VIM REFERENCE MANUAL	  by Bram Moolenaar | ||||
| @@ -3512,25 +3512,25 @@ cases pertain, then the first line of the file is examined (ex. looking for | ||||
| /bin/sh  /bin/ksh  /bin/bash).  If the first line specifies a shelltype, then | ||||
| that shelltype is used.  However some files (ex. .profile) are known to be | ||||
| shell files but the type is not apparent.  Furthermore, on many systems sh is | ||||
| symbolically linked to "bash" (Linux, Windows+cygwin) or "ksh" (Posix). | ||||
| symbolically linked to "bash" (Linux, Windows+cygwin) or "ksh" (POSIX). | ||||
|  | ||||
| One may specify a global default by instantiating one of the following | ||||
| variables in your <.vimrc>: | ||||
|  | ||||
|    ksh: > | ||||
| 	let g:is_kornshell = 1 | ||||
| <   posix:  (using this is nearly the same as setting g:is_kornshell to 1) > | ||||
| <   posix: (default) > | ||||
| 	let g:is_posix     = 1 | ||||
| <   bash: > | ||||
| 	let g:is_bash	   = 1 | ||||
| <   sh: (default) Bourne shell > | ||||
| <   dash: > | ||||
| 	let g:is_dash	   = 1 | ||||
| <   sh: Bourne shell > | ||||
| 	let g:is_sh	   = 1 | ||||
|  | ||||
| <   (dash users should use posix) | ||||
|  | ||||
| If there's no "#! ..." line, and the user hasn't availed himself/herself of a | ||||
| default sh.vim syntax setting as just shown, then syntax/sh.vim will assume | ||||
| the Bourne shell syntax.  No need to quote RFCs or market penetration | ||||
| the POSIX shell syntax.  No need to quote RFCs or market penetration | ||||
| statistics in error reports, please -- just select the default version of the | ||||
| sh your system uses and install the associated "let..." in your <.vimrc>. | ||||
|  | ||||
|   | ||||
| @@ -7,6 +7,7 @@ | ||||
| "		2024 Nov 03 by Aliaksei Budavei <0x000c70 AT gmail DOT com> (improved bracket expressions, #15941) | ||||
| "		2025 Jan 06 add $PS0 to bashSpecialVariables (#16394) | ||||
| "		2025 Jan 18 add bash coproc, remove duplicate syn keywords (#16467) | ||||
| "		2025 Mar 21 update shell capability detection (#16939) | ||||
| " Version:		208 | ||||
| " Former URL:		http://www.drchip.org/astronaut/vim/index.html#SYNTAX_SH | ||||
| " For options and settings, please use:      :help ft-sh-syntax | ||||
| @@ -17,6 +18,9 @@ if exists("b:current_syntax") | ||||
|   finish | ||||
| endif | ||||
|  | ||||
| " Ensure this is set unless we find another shell | ||||
| let b:is_sh = 1 | ||||
|  | ||||
| " If the shell script itself specifies which shell to use, use it | ||||
| if getline(1) =~ '\<ksh\>' | ||||
|  let b:is_kornshell = 1 | ||||
| @@ -24,7 +28,25 @@ elseif getline(1) =~ '\<bash\>' | ||||
|  let b:is_bash      = 1 | ||||
| elseif getline(1) =~ '\<dash\>' | ||||
|  let b:is_dash      = 1 | ||||
| elseif !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix") && !exists("g:is_sh") && !exists("g:is_dash") | ||||
| " handling /bin/sh with is_kornshell/is_sh {{{1 | ||||
| " b:is_sh will be set when "#! /bin/sh" is found; | ||||
| " However, it often is just a masquerade by bash (typically Linux) | ||||
| " or kornshell (typically workstations with Posix "sh"). | ||||
| " So, when the user sets "g:is_kornshell", "g:is_bash", | ||||
| " "g:is_posix" or "g:is_dash", a b:is_sh is converted into | ||||
| " b:is_kornshell/b:is_bash/b:is_posix/b:is_dash, respectively. | ||||
| elseif !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_posix") && !exists("b:is_dash") | ||||
|  if exists("g:is_kornshell") | ||||
|   let b:is_kornshell= 1 | ||||
|  elseif exists("g:is_bash") | ||||
|   let b:is_bash= 1 | ||||
|  elseif exists("g:is_dash") | ||||
|   let b:is_dash= 1 | ||||
|  elseif exists("g:is_posix") | ||||
|   let b:is_posix= 1 | ||||
|  elseif exists("g:is_sh") | ||||
|   let b:is_sh= 1 | ||||
|  else | ||||
|   " user did not specify which shell to use, and | ||||
|   " the script itself does not specify which shell to use. FYI: /bin/sh is ambiguous. | ||||
|   " Assuming /bin/sh is executable, and if its a link, find out what it links to. | ||||
| @@ -40,38 +62,10 @@ elseif !exists("g:is_kornshell") && !exists("g:is_bash") && !exists("g:is_posix" | ||||
|    let b:is_bash = 1 | ||||
|   elseif s:shell =~ '\<dash\>' | ||||
|    let b:is_dash = 1 | ||||
|   else | ||||
|    let b:is_posix = 1 | ||||
|   endif | ||||
|   unlet s:shell | ||||
| endif | ||||
|  | ||||
| " handling /bin/sh with is_kornshell/is_sh {{{1 | ||||
| " b:is_sh will be set when "#! /bin/sh" is found; | ||||
| " However, it often is just a masquerade by bash (typically Linux) | ||||
| " or kornshell (typically workstations with Posix "sh"). | ||||
| " So, when the user sets "g:is_bash", "g:is_kornshell", | ||||
| " or "g:is_posix", a b:is_sh is converted into b:is_bash/b:is_kornshell, | ||||
| " respectively. | ||||
| if !exists("b:is_kornshell") && !exists("b:is_bash") && !exists("b:is_dash") | ||||
|   if exists("g:is_posix") && !exists("g:is_kornshell") | ||||
|    let g:is_kornshell= g:is_posix | ||||
|   endif | ||||
|   if exists("g:is_kornshell") | ||||
|     let b:is_kornshell= 1 | ||||
|     if exists("b:is_sh") | ||||
|       unlet b:is_sh | ||||
|     endif | ||||
|   elseif exists("g:is_bash") | ||||
|     let b:is_bash= 1 | ||||
|     if exists("b:is_sh") | ||||
|       unlet b:is_sh | ||||
|     endif | ||||
|   elseif exists("g:is_dash") | ||||
|     let b:is_dash= 1 | ||||
|     if exists("b:is_sh") | ||||
|       unlet b:is_sh | ||||
|     endif | ||||
|   else | ||||
|     let b:is_sh= 1 | ||||
|  endif | ||||
| endif | ||||
|  | ||||
| @@ -80,6 +74,12 @@ if exists("b:is_dash") | ||||
|  let b:is_posix= 1 | ||||
| endif | ||||
|  | ||||
| if exists("b:is_kornshell") || exists("b:is_bash") | ||||
|  if exists("b:is_sh") | ||||
|   unlet b:is_sh | ||||
|  endif | ||||
| endif | ||||
|  | ||||
| " set up default g:sh_fold_enabled {{{1 | ||||
| " ================================ | ||||
| if !exists("g:sh_fold_enabled") | ||||
|   | ||||
		Reference in New Issue
	
	Block a user