Linux jobworks 6.8.0-136-generic #136-Ubuntu SMP PREEMPT_DYNAMIC Wed Jul 1 21:53:05 UTC 2026 x86_64
Apache/2.4.58 (Ubuntu)
Server IP : 10.0.1.5 & Your IP : 216.73.217.52
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
usr /
share /
vim /
vim91 /
autoload /
Delete
Unzip
Name
Size
Permission
Date
Action
dist
[ DIR ]
drwxr-xr-x
2026-07-16 06:48
xml
[ DIR ]
drwxr-xr-x
2026-07-16 06:48
zig
[ DIR ]
drwxr-xr-x
2026-07-16 06:48
RstFold.vim
1.86
KB
-rw-r--r--
2026-07-13 17:17
ada.vim
22.04
KB
-rw-r--r--
2026-07-13 17:17
adacomplete.vim
3.58
KB
-rw-r--r--
2026-07-13 17:17
bitbake.vim
3.02
KB
-rw-r--r--
2026-07-13 17:17
cargo.vim
3.96
KB
-rw-r--r--
2026-07-13 17:17
ccomplete.vim
19.39
KB
-rw-r--r--
2026-07-13 17:17
clojurecomplete.vim
8.66
KB
-rw-r--r--
2026-07-13 17:17
context.vim
2.46
KB
-rw-r--r--
2026-07-13 17:17
contextcomplete.vim
656
B
-rw-r--r--
2026-07-13 17:17
csscomplete.vim
42.24
KB
-rw-r--r--
2026-07-13 17:17
decada.vim
2.93
KB
-rw-r--r--
2026-07-13 17:17
freebasic.vim
1.02
KB
-rw-r--r--
2026-07-13 17:17
getscript.vim
24.29
KB
-rw-r--r--
2026-07-13 17:17
gnat.vim
5.21
KB
-rw-r--r--
2026-07-13 17:17
gzip.vim
6.55
KB
-rw-r--r--
2026-07-13 17:17
haskellcomplete.vim
103.31
KB
-rw-r--r--
2026-07-13 17:17
htmlcomplete.vim
24.88
KB
-rw-r--r--
2026-07-13 17:17
javascriptcomplete.vim
27.49
KB
-rw-r--r--
2026-07-13 17:17
modula2.vim
691
B
-rw-r--r--
2026-07-13 17:17
netrw.vim
555.71
KB
-rw-r--r--
2026-07-13 17:17
netrwFileHandlers.vim
9.89
KB
-rw-r--r--
2026-07-13 17:17
netrwSettings.vim
10.09
KB
-rw-r--r--
2026-07-13 17:17
netrw_gitignore.vim
1.21
KB
-rw-r--r--
2026-07-13 17:17
paste.vim
738
B
-rw-r--r--
2026-07-13 17:17
phpcomplete.vim
346.23
KB
-rw-r--r--
2026-07-13 17:17
python.vim
7.7
KB
-rw-r--r--
2026-07-13 17:17
python3complete.vim
23.3
KB
-rw-r--r--
2026-07-13 17:17
pythoncomplete.vim
23.73
KB
-rw-r--r--
2026-07-13 17:17
racket.vim
7.29
KB
-rw-r--r--
2026-07-13 17:17
rubycomplete.vim
25.2
KB
-rw-r--r--
2026-07-13 17:17
rust.vim
16.58
KB
-rw-r--r--
2026-07-13 17:17
rustfmt.vim
7.8
KB
-rw-r--r--
2026-07-13 17:17
spellfile.vim
6.03
KB
-rw-r--r--
2026-07-13 17:17
sqlcomplete.vim
38.27
KB
-rw-r--r--
2026-07-13 17:17
syntaxcomplete.vim
32.86
KB
-rw-r--r--
2026-07-13 17:17
tar.vim
29.23
KB
-rw-r--r--
2026-07-13 17:17
tohtml.vim
31.68
KB
-rw-r--r--
2026-07-13 17:17
typeset.vim
5.94
KB
-rw-r--r--
2026-07-13 17:17
vimball.vim
23.76
KB
-rw-r--r--
2026-07-13 17:17
xmlcomplete.vim
14.59
KB
-rw-r--r--
2026-07-13 17:17
xmlformat.vim
6.05
KB
-rw-r--r--
2026-07-13 17:17
zip.vim
15.42
KB
-rw-r--r--
2026-07-13 17:17
Save
Rename
" Maintainer: D. Ben Knoble <ben.knoble+github@gmail.com> " URL: https://github.com/benknoble/vim-racket " Last Change: 2023 Sep 22 vim9script def MakePatternFromLiterals(xs: list<string>): string return printf('\V%s', xs->mapnew((_, v) => escape(v, '\'))->join('\|')) enddef const openers = ['(', '[', '{'] const closers = {'(': ')', '[': ']', '{': '}'} const brackets_pattern: string = closers->items()->flattennew()->MakePatternFromLiterals() # transliterated from a modified copy of src/indent.c export def Indent(): number if InHerestring(v:lnum) return -1 endif # Indent from first column to avoid odd results from nested forms. cursor(v:lnum, 1) const bracket = FindBracket() if bracket == null_dict || !bracket.found return -1 endif # assert_report(printf('{lnum: %d, str: %s, found: %s, line: %d, column: %d}', # v:lnum, getline(bracket.line)[bracket.column - 1], bracket.found, bracket.line, bracket.column)) # N.B. Column =/= Line Index; Columns start at 1 const amount: number = bracket.column const line = getline(bracket.line) const lw = Lispword(line[bracket.column :]) if !IsForFold(lw) # skip: see comments about for/fold special case below # "Extra trick" var current = prevnonblank(v:lnum - 1) while current > bracket.line cursor(current, 1) if getline(current) !~# '^\s*;' && synID(current, 1, 0)->synIDattr('name') !~? 'string' && FindBracket() == bracket return indent(current) endif current = prevnonblank(current - 1) endwhile cursor(v:lnum, 1) endif if index(openers, line[bracket.column - 1]) >= 0 && !empty(lw) # Special case for/fold &co. The iterator clause (2nd form) is indented # under the accumulator clause (1st form). Everything else is standard. const start_of_first_form = match(line[bracket.column :], MakePatternFromLiterals(openers)) # assert_report(printf('{line: %s}', line)) # assert_report(printf('{start: %s}', start_of_first_form >= 0 ? line[bracket.column + start_of_first_form :] : '<NULL>')) if IsForFold(lw) && IsSecondForm(bracket.line, bracket.column, v:lnum) && start_of_first_form >= 0 return amount + start_of_first_form else # Lispword, but not for/fold second form (or first form couldn't be # found): indent like define or lambda. # 2 extra indent, but subtract 1 for columns starting at 1. # Current vim9 doesn't constant fold "x + 2 - 1", so write "x + 1" return amount + 1 endif else # assert_report(printf('{line: %s}', line[bracket.column :])) return amount + IndentForContinuation(bracket.line, bracket.column, line[bracket.column :]) endif enddef def InHerestring(start: number): bool return synID(start, col([start, '$']) - 1, 0)->synIDattr('name') =~? 'herestring' enddef def FindBracket(): dict<any> const paren = FindMatch('(', ')') const square = FindMatch('\[', ']') const curly = FindMatch('{', '}') return null_dict ->MatchMax(paren) ->MatchMax(square) ->MatchMax(curly) enddef def Lispword(line: string): string # assume keyword on same line as opener const word: string = matchstr(line, '^\s*\k\+\>')->trim() # assert_report(printf('line: %s; word: %s', line, word)) # assert_report(&l:lispwords->split(',')->index(word) >= 0 ? 't' : 'f') return &l:lispwords->split(',')->index(word) >= 0 ? word : '' enddef # line contains everything on line_nr after column def IndentForContinuation(line_nr: number, column: number, line: string): number const end = len(line) var indent = match(line, '[^[:space:]]') # first word is a string or some other literal (or maybe a form); assume that # the current line is outside such a thing if indent < end && ['"', '#']->index(line[indent]) >= 0 return indent endif if indent < end && ["'", '`']->index(line[indent]) >= 0 # could be a form or a word. Advance one and see. ++indent endif if indent < end && ['(', '[', '{']->index(line[indent]) >= 0 # there's a form; assume outside, but need to skip it to see if any others cursor(line_nr, column + indent + 1) # assert_report(getline(line_nr)[column + indent :]) normal! % const [_, matched_line, matched_col, _, _] = getcursorcharpos() if line_nr != matched_line || matched_col == column + indent + 1 return indent endif indent = matched_col - column endif var in_delim: bool var quoted: bool while indent < end && (line[indent] !~# '\s' || in_delim || quoted) if line[indent] == '\' && !in_delim quoted = true else quoted = false endif if line[indent] == '|' && !quoted in_delim = !in_delim endif ++indent endwhile # not handling newlines in first words if quoted || in_delim return 0 endif # no other word on this line if indent == end return 0 endif # find beginning of next word indent += match(line[indent :], '[^[:space:]]') return indent enddef def FindMatch(start: string, end: string): dict<any> # TODO too slow… # could try replicating C? might have false positives. Or make "100" # configurable number: for amounts of indent bodies, we're still fast enough… const [linenr, column] = searchpairpos(start, '', end, 'bnzW', () => synID(line('.'), col('.'), 0)->synIDattr('name') =~? 'char\|string\|comment', line('.') > 100 ? line('.') - 100 : 0) if linenr > 0 && column > 0 return {found: true, line: linenr, column: column} else return {found: false, line: linenr, column: column} endif enddef def MatchMax(left: dict<any>, right: dict<any>): dict<any> if left == null_dict || !left.found return right endif if right == null_dict || !right.found return left endif # left and right non-null, both found return PosLT(left, right) ? right : left enddef def PosLT(left: dict<any>, right: dict<any>): bool return left.line != right.line \ ? left.line < right.line \ : (left.column != right.column && left.column < right.column) enddef def IsForFold(word: string): bool return ['for/fold', 'for/foldr', 'for*/fold', 'for*/foldr']->index(word) >= 0 enddef def IsSecondForm(blnum: number, bcol: number, vlnum: number): bool var forms_seen: number # "top-level" (inside for/fold) counter only var [lnum, col] = [blnum, bcol + 1] cursor(lnum, col) var stack: list<string> = [] while lnum <= vlnum const found = search(brackets_pattern, '', vlnum, 0, () => synID(line('.'), col('.'), 0)->synIDattr('name') =~? 'char\|string\|comment') if found <= 0 break endif const pos = getcursorcharpos() lnum = pos[1] col = pos[2] var current_char = getline(lnum)[col - 1] # assert_report(printf('search: %d, %d: %s', lnum, col, current_char)) # assert_report(printf('forms seen post-search: %d', forms_seen)) if index(openers, current_char) >= 0 insert(stack, current_char) elseif !empty(stack) && current_char ==# closers[stack[0]] stack = stack[1 :] if empty(stack) ++forms_seen endif else # parse failure of some kind: not an opener or not the correct closer return false endif # assert_report(printf('forms seen pre-check: %d', forms_seen)) if forms_seen > 2 return false endif endwhile # assert_report(printf('forms seen pre-return: %d', forms_seen)) return forms_seen == 2 || (forms_seen == 1 && !empty(stack)) enddef