2015-02-21 2 views
1

:r !program открывает новую строку, вставляет выходные данные моей программы, а затем вставляет строку после нее. Я просто хочу вставить выход прямо там, где курсор без лишнего беспорядка.Vim --- Чтение из внешней команды, вставка справа, где курсор

Я полагал, что я могу:

  1. Выполнить до того макро

    mai^M^[`a 
    
    "Mark where I'm at, insert a line and go back 
    
  2. Запуск моя команда

    :r !echo -ne "line1\nline2\nline3" 
    
  3. запустить после макросъемки (очистки линии)

    $mb:j!^M`a:j!^M`b 
    
    "Go to the end of inserted outpu 
    "Mark it b 
    "Join with the next line 
    "Go to the first mark 
    "Delete the inserted newline with :j! 
    "Go to the second mark 
    

Как объединить это в одну команду? Я хотел бы быть в состоянии сделать:

:Readhere !echo -ne "line1\nline2\nline3"  

где: Readhere будет моя команда запуска.

ответ

1

Это может сделать то, что вы хотите. (Вам не нужно !)

command! -nargs=1 ReadHere exec 'normal! i' . system(<q-args>) 

Это создает команду под названием ReadHere, который принимает все, как аргумент в кавычках, и передает ее непосредственно в системную команду. Затем мы используем exec для вставки всего в обычный режим. (Это может быть не достаточно надежными)


Пример: Запуск буфер

one two three 

Запуск :ReadHere echo -ne "line1\nline2\nline3" где курсор находится на w производит

one tline1 
line2 
line3wo three 
+0

Отлично! Большое спасибо! – PSkocik

Смежные вопросы