Считайте "Язык программирования C". Запишите короткие упражнения (некоторые находятся в книге). Используйте компилятор, такой как gcc.
Выберите блок текста, затем введите эти ключи: w! Sh
Все должно выглядеть так:
:'<,'>w !sh
Вот и все. Мне потребовалось всего 8 лет, чтобы выучить это:)
примечание: ввод текста: после выделения текста производит: '<,'> диапазон, указывающий начало и конец выделения.
Обновление 2016: На самом деле это всего лишь одно из применений универсального:
'<,'>w !cli_command
Который в основном позволяет вам «отправлять» произвольные части вашего файла внешним командам и видеть результаты во временном окне vi без изменения вашего буфера. Другие полезные примеры:
'<,'>w !wc
'<,'>w !to_file my_file
Я, честно говоря, считаю более полезным изменить текущий буфер. Это просто:
'<,'>!wc
'<,'>!to_file my_file
Одна из возможностей - использовать system ()
в пользовательской команде, примерно так:
command! -range -nargs=1 SendToCommand <line1>,<line2>call SendToCommand(<q-args>)
function! SendToCommand(UserCommand) range
" Get a list of lines containing the selected range
let SelectedLines = getline(a:firstline,a:lastline)
" Convert to a single string suitable for passing to the command
let ScriptInput = join(SelectedLines, "\n") . "\n"
" Run the command
let result = system(a:UserCommand, ScriptInput)
" Echo the result (could just do "echo system(....)")
echo result
endfunction
Вызовите это с помощью (например):
:'<,'>SendToCommand wc -w
Обратите внимание, что если вы нажмете V%:
, : '< , '>
будет введено за вас.
:help command
:help command-range
:help command-nargs
:help q-args
:help function
:help system()
:help function-range
Я знаю, что это не идеальное решение, но если ничего не помогает, вы всегда можете просто нажать u после выполнения команды, чтобы отменить изменение буфера.