Ich versuche gerade ein Skript zu schreiben, das das Aufrufen eines Vim-Befehls ermöglicht, der wiederum einen externen Befehl aufruft. Ich möchte die automatische Vervollständigung mit Ergebnissen in einer Liste von Dateien mit einer bestimmten Erweiterung aktivieren (siehe Code unten).Vim Script-Befehl-Vervollständigen: Tab drücken, laden Sie die Liste neu
Die Komplettierung durchläuft tatsächlich die Liste der Dateien mit der angegebenen Erweiterung, aber wenn ich etwas eintippe und die Tabulatortaste drücke, wird der Abschlusszyklus vom Anfang der Liste wiederholt, unabhängig davon, was gerade eingegeben wird Vervollständigen des restlichen Dateinamens, der in der Eingabe angegeben ist). Der Code ist die folgende:
call CreateEditCommand('EComponent', 'ComponentFiles')
function! CreateEditCommand(command, listFunction)
silent execute 'command! -nargs=1 -complete=customlist,'. a:listFunction . ' ' . a:command . ' call EditFile(<f-args>)'
endfunction
function! ComponentFiles(A,L,P)
return Files('component.ts')
endfunction
function! Files(extension)
let paths = split(globpath('.', '**/*.' . a:extension), "\n")
let idx = range(0, len(paths)-1)
let g:global_paths = {}
for i in idx
let g:global_paths[fnamemodify(paths[i], ':t:r')] = paths[i]
endfor
call map(paths, 'fnamemodify(v:val, ":t:r")')
return paths
endfunction
function! EditFile(file)
execute 'edit' g:global_paths[a:file]
endfunction
Zum Beispiel, wenn ich habe: app.component.ts und test.component.ts und ich tippe
:EComponent test
und die Tabulatortaste drücken, die abgeschlossene Befehl wird die folgende
:EComponent app.component.ts
statt:
:EComponent test.component.ts
Vielen Dank im Voraus für Ihre Hilfe zu diesem Thema.
Was ist der Zweck dieses "Befehlsfabrikbefehls"? – romainl