Mercurial > vim
comparison runtime/indent/nginx.vim @ 31579:7d68a90cbf5c
Update runtime files
Commit: https://github.com/vim/vim/commit/f1dcd14fc5d4370476cd82895a4479ca2d252e54
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Dec 31 15:30:45 2022 +0000
Update runtime files
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 31 Dec 2022 16:45:06 +0100 |
parents | 6dd88e45d47d |
children |
comparison
equal
deleted
inserted
replaced
31578:e90cb8fbfbb6 | 31579:7d68a90cbf5c |
---|---|
1 " Vim indent file | 1 " Vim indent file |
2 " Language: nginx.conf | 2 " Language: nginx.conf |
3 " Maintainer: Chris Aumann <me@chr4.org> | 3 " Maintainer: Chris Aumann <me@chr4.org> |
4 " Last Change: 2022 Apr 06 | 4 " Last Change: 2022 Dec 01 |
5 | 5 |
6 if exists("b:did_indent") | 6 " Only load this indent file when no other was loaded. |
7 finish | 7 if exists('b:did_indent') |
8 finish | |
8 endif | 9 endif |
9 let b:did_indent = 1 | 10 let b:did_indent = 1 |
10 | 11 |
11 setlocal indentexpr= | 12 setlocal indentexpr=GetNginxIndent() |
12 | 13 |
13 " cindent actually works for nginx' simple file structure | 14 setlocal indentkeys=0{,0},0#,!^F,o,O |
14 setlocal cindent | |
15 | 15 |
16 " Just make sure that the comments are not reset as defs would be. | 16 let b:undo_indent = 'setl inde< indk<' |
17 setlocal cinkeys-=0# | |
18 | 17 |
19 let b:undo_indent = "setl inde< cin< cink<" | 18 " Only define the function once. |
19 if exists('*GetNginxIndent') | |
20 finish | |
21 endif | |
22 | |
23 function GetNginxIndent() abort | |
24 let plnum = s:PrevNotAsBlank(v:lnum - 1) | |
25 | |
26 " Hit the start of the file, use zero indent. | |
27 if plnum == 0 | |
28 return 0 | |
29 endif | |
30 | |
31 let ind = indent(plnum) | |
32 | |
33 " Add a 'shiftwidth' after '{' | |
34 if s:AsEndWith(getline(plnum), '{') | |
35 let ind = ind + shiftwidth() | |
36 end | |
37 | |
38 " Subtract a 'shiftwidth' on '}' | |
39 " This is the part that requires 'indentkeys'. | |
40 if getline(v:lnum) =~ '^\s*}' | |
41 let ind = ind - shiftwidth() | |
42 endif | |
43 | |
44 let pplnum = s:PrevNotAsBlank(plnum - 1) | |
45 | |
46 if s:IsLineContinuation(plnum) | |
47 if !s:IsLineContinuation(pplnum) | |
48 let ind = ind + shiftwidth() | |
49 end | |
50 else | |
51 if s:IsLineContinuation(pplnum) | |
52 let ind = ind - shiftwidth() | |
53 end | |
54 endif | |
55 | |
56 return ind | |
57 endfunction | |
58 | |
59 " Find the first line at or above {lnum} that is non-blank and not a comment. | |
60 function s:PrevNotAsBlank(lnum) abort | |
61 let lnum = prevnonblank(a:lnum) | |
62 while lnum > 0 | |
63 if getline(lnum) !~ '^\s*#' | |
64 break | |
65 endif | |
66 let lnum = prevnonblank(lnum - 1) | |
67 endwhile | |
68 return lnum | |
69 endfunction | |
70 | |
71 " Check whether {line} ends with {pat}, ignoring trailing comments. | |
72 function s:AsEndWith(line, pat) abort | |
73 return a:line =~ a:pat . '\m\s*\%(#.*\)\?$' | |
74 endfunction | |
75 | |
76 function s:IsLineContinuation(lnum) abort | |
77 return a:lnum > 0 && !s:AsEndWith(getline(a:lnum), '[;{}]') | |
78 endfunction |