Bram Moolenaar | 9b03d3e | 2022-08-30 20:26:34 +0100 | [diff] [blame] | 1 | vim9script |
| 2 | |
| 3 | # Vim filetype plugin file |
| 4 | # Language: gdscript (Godot game engine scripting language) |
| 5 | # Maintainer: Maxim Kim <habamax@gmail.com> |
Bram Moolenaar | 0daafaa | 2022-09-04 17:45:43 +0100 | [diff] [blame] | 6 | # Website: https://github.com/habamax/vim-gdscript |
markmacode | 6a54dcb | 2024-07-16 21:18:06 +0200 | [diff] [blame] | 7 | # Last Change: 2024 Jul 14 |
Bram Moolenaar | 9b03d3e | 2022-08-30 20:26:34 +0100 | [diff] [blame] | 8 | |
| 9 | if exists("b:did_ftplugin") | finish | endif |
| 10 | |
| 11 | b:did_ftplugin = 1 |
| 12 | b:undo_ftplugin = 'setlocal cinkeys<' |
| 13 | \ .. '| setlocal indentkeys<' |
| 14 | \ .. '| setlocal commentstring<' |
| 15 | \ .. '| setlocal suffixesadd<' |
| 16 | \ .. '| setlocal foldexpr<' |
| 17 | \ .. '| setlocal foldignore<' |
| 18 | |
| 19 | setlocal cinkeys-=0# |
| 20 | setlocal indentkeys-=0# |
| 21 | setlocal suffixesadd=.gd |
| 22 | setlocal commentstring=#\ %s |
| 23 | setlocal foldignore= |
| 24 | setlocal foldexpr=GDScriptFoldLevel() |
| 25 | |
markmacode | 6a54dcb | 2024-07-16 21:18:06 +0200 | [diff] [blame] | 26 | if get(g:, 'gdscript_recommended_style', 1) |
| 27 | setlocal noexpandtab tabstop=4 softtabstop=0 shiftwidth=0 |
| 28 | b:undo_ftplugin ..= ' | setlocal expandtab< tabstop< softtabstop< shiftwidth<' |
| 29 | endif |
| 30 | |
Bram Moolenaar | 9b03d3e | 2022-08-30 20:26:34 +0100 | [diff] [blame] | 31 | |
| 32 | def GDScriptFoldLevel(): string |
| 33 | var line = getline(v:lnum) |
| 34 | if line =~? '^\s*$' |
| 35 | return "-1" |
| 36 | endif |
| 37 | |
| 38 | var sw = shiftwidth() |
| 39 | var indent = indent(v:lnum) / sw |
| 40 | var indent_next = indent(nextnonblank(v:lnum + 1)) / sw |
| 41 | |
| 42 | if indent_next > indent && line =~ ':\s*$' |
| 43 | return $">{indent_next}" |
| 44 | else |
| 45 | return $"{indent}" |
| 46 | endif |
| 47 | enddef |
| 48 | |
| 49 | |
Bram Moolenaar | 9712ff1 | 2022-09-18 13:04:22 +0100 | [diff] [blame] | 50 | if !exists("g:no_plugin_maps") |
| 51 | # Next/Previous section |
| 52 | def NextSection(back: bool, cnt: number) |
| 53 | for n in range(cnt) |
| 54 | search('^\s*func\s', back ? 'bW' : 'W') |
| 55 | endfor |
| 56 | enddef |
Bram Moolenaar | 9b03d3e | 2022-08-30 20:26:34 +0100 | [diff] [blame] | 57 | |
Bram Moolenaar | 9712ff1 | 2022-09-18 13:04:22 +0100 | [diff] [blame] | 58 | nnoremap <silent><buffer> ]] <scriptcmd>NextSection(false, v:count1)<CR> |
| 59 | nnoremap <silent><buffer> [[ <scriptcmd>NextSection(true, v:count1)<CR> |
| 60 | xmap <buffer><expr> ]] $'<C-\><C-N>{v:count1}]]m>gv' |
| 61 | xmap <buffer><expr> [[ $'<C-\><C-N>{v:count1}[[m>gv' |
| 62 | b:undo_ftplugin ..= |
| 63 | \ " | silent exe 'unmap <buffer> [['" |
| 64 | \ .. " | silent exe 'unmap <buffer> ]]'" |
| 65 | endif |