Я пытаюсь выполнить сценарий оболочки из .vimrc файла (три проблемы, отмеченные в сценарии):
function! CheckMe(file)
let shellcmd = 'checkme '.a:file
" Start the command and return 0 on success.
" XXX: How do you evaluate the return code?
execute '!'.shellcmd
if !result
return 0
endif
" Ending up here, the command returned an error.
" XXX: Where to you get the output?
let pair = split(output, '\S')
let line = pair[0]
let char = pair[1]
" Jump to the errenous column and line.
" XXX: Why does this not work?
normal '/\%'.line.'l\%'.char.'c'
return 1
endfunction
Таким образом для суммирования, как Вы получаете результат/вывод сценария, и почему оператор перехода не работает?
Дополнительные детали:
Действительно, фактический метод имеет приоритет над методом расширения. И просто дать понять - «порядок исполнения» предполагает, что оба могут называться; будет вызван только исходный метод. Возможно, выбрать другое имя/подпись; вы не можете использовать методы расширения для исправления обезьян, если это ваше намерение.
Если существует какой-либо базовый класс/интерфейс (который реализует тип), который не имеет этот метод, вы, возможно, могли бы поместить его туда...?
-121--2644555- Я не удивлюсь, если есть почтовые клиенты, которые не смогут связать почту Blackberry с их потоками. Заголовок Thread-Index
является расширением Microsoft.
Либо путь, Novell Evolution реализует это. Посмотрите на это краткое описание того, как они это делают, или на этот фрагмент кода , который находит родительский поток данного сообщения.
Я предполагаю, что, поскольку длины заголовков Thread-Index
в вашем примере одинаковы, все эти сообщения были начальными? Странно, что они всего 22 байта, хотя я полагаю, что вы можете попробовать применить правило 5 байтов на сообщение к ним и посмотреть, работает ли оно для вас.
function! CheckMe(file)
let shellcmd = 'checkme '.a:file
let output=system(shellcmd)
if !v:shell_error
return 0
endif
" Are you sure you want to split on non-blanks? This
" will result in list of blank strings.
" My variant:
let [line, char]=split(output)
" Normal is not an execute: this is what it will do:
" «'/» means «Go to mark /», produces an error E78 because /
" is not a valid symbol for mark. Than normal stops after error occured.
" If you need to use variables in nomal use «execute 'normal '.ncmd».
" And you can not use «normal» to perform search
execute '/\%'.line.'l\%'.char.'c'
" or
call setpos('.', [0, line, char, 0])
return 1
endfunction
Согласно документам Vim, аргумент ключевого слова «normal» «выполняется так, как он набран», но, очевидно, это не так. Он работает нормально, когда я набираю его (в обычном командном режиме, без начала ':'), но не в сценарии ("E78: Unknown mark).
Просто введите «'/», чтобы получить эту ошибку.
Я думаю, вы хотите использовать функцию system()
вместо !
команды оболочки.
Со страницы по ссылке:
The result is a String. Example: :let files = system("ls " . shellescape(expand('%:h')))
и
The resulting error code can be found in |v:shell_error|.
Таким образом, ваш вывод
будет результатом системного вызова, а ваш результат
будет результатом v:shell_error
. Тогда ваш переход должен сработать.