| 
									
										
										
										
											2022-08-30 20:26:34 +01:00
										 |  |  | vim9script | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | # Vim filetype plugin file | 
					
						
							|  |  |  | # Language: gdscript (Godot game engine scripting language) | 
					
						
							|  |  |  | # Maintainer: Maxim Kim <habamax@gmail.com> | 
					
						
							| 
									
										
										
										
											2022-09-04 17:45:43 +01:00
										 |  |  | # Website: https://github.com/habamax/vim-gdscript | 
					
						
							| 
									
										
										
										
											2024-07-16 21:18:06 +02:00
										 |  |  | # Last Change: 2024 Jul 14 | 
					
						
							| 
									
										
										
										
											2022-08-30 20:26:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | if exists("b:did_ftplugin") | finish | endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | b:did_ftplugin = 1 | 
					
						
							|  |  |  | b:undo_ftplugin = 'setlocal cinkeys<' | 
					
						
							|  |  |  |       \ .. '| setlocal indentkeys<' | 
					
						
							|  |  |  |       \ .. '| setlocal commentstring<' | 
					
						
							|  |  |  |       \ .. '| setlocal suffixesadd<' | 
					
						
							|  |  |  |       \ .. '| setlocal foldexpr<' | 
					
						
							|  |  |  |       \ .. '| setlocal foldignore<' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | setlocal cinkeys-=0# | 
					
						
							|  |  |  | setlocal indentkeys-=0# | 
					
						
							|  |  |  | setlocal suffixesadd=.gd | 
					
						
							|  |  |  | setlocal commentstring=#\ %s | 
					
						
							|  |  |  | setlocal foldignore= | 
					
						
							|  |  |  | setlocal foldexpr=GDScriptFoldLevel() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2024-07-16 21:18:06 +02:00
										 |  |  | if get(g:, 'gdscript_recommended_style', 1) | 
					
						
							|  |  |  |     setlocal noexpandtab tabstop=4 softtabstop=0 shiftwidth=0 | 
					
						
							|  |  |  |     b:undo_ftplugin ..= ' | setlocal expandtab< tabstop< softtabstop< shiftwidth<' | 
					
						
							|  |  |  | endif | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-30 20:26:34 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | def GDScriptFoldLevel(): string | 
					
						
							|  |  |  |     var line = getline(v:lnum) | 
					
						
							|  |  |  |     if line =~? '^\s*$' | 
					
						
							|  |  |  |         return "-1" | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     var sw = shiftwidth() | 
					
						
							|  |  |  |     var indent = indent(v:lnum) / sw | 
					
						
							|  |  |  |     var indent_next = indent(nextnonblank(v:lnum + 1)) / sw | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     if indent_next > indent && line =~ ':\s*$' | 
					
						
							|  |  |  |         return $">{indent_next}" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |         return $"{indent}" | 
					
						
							|  |  |  |     endif | 
					
						
							|  |  |  | enddef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-09-18 13:04:22 +01:00
										 |  |  | if !exists("g:no_plugin_maps") | 
					
						
							|  |  |  |     # Next/Previous section | 
					
						
							|  |  |  |     def NextSection(back: bool, cnt: number) | 
					
						
							|  |  |  |         for n in range(cnt) | 
					
						
							|  |  |  |             search('^\s*func\s', back ? 'bW' : 'W') | 
					
						
							|  |  |  |         endfor | 
					
						
							|  |  |  |     enddef | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     nnoremap <silent><buffer> ]] <scriptcmd>NextSection(false, v:count1)<CR> | 
					
						
							|  |  |  |     nnoremap <silent><buffer> [[ <scriptcmd>NextSection(true, v:count1)<CR> | 
					
						
							|  |  |  |     xmap <buffer><expr> ]] $'<C-\><C-N>{v:count1}]]m>gv' | 
					
						
							|  |  |  |     xmap <buffer><expr> [[ $'<C-\><C-N>{v:count1}[[m>gv' | 
					
						
							|  |  |  |     b:undo_ftplugin ..= | 
					
						
							|  |  |  |           \    " | silent exe 'unmap <buffer> [['" | 
					
						
							|  |  |  |           \ .. " | silent exe 'unmap <buffer> ]]'" | 
					
						
							|  |  |  | endif |