5

Я хотел бы иметь возможность оценить строку Javascript (или другого кода) в Vim, и чтобы результат отображался в комментарии в конце строки.

Например, если у меня есть файл вроде:

console.log(4 + 5);

и мой курсор находится на этой строке, и я использую команду :.w !node -e , результат " 9 " появится в буфере ниже. если я использую :. !node -e , вся строка будет заменена результатом, 9 .

Как я могу вместо этого создать команду, которая добавит результат в конец строки в комментарии, например так:

console.log(4 + 5);    // 9

Также следует отметить, что использование :r напечатает все, что ему передано, в следующей строке. r !echo "This is text." вставит « This is text. » в строку под курсором. Однако команда вроде ...

:r ". !node -e"

... попробую прочитать ". !node -e" как файл вместо команды; я не совсем понимаю это поведение, но оно делает вещи немного менее интуитивными.

Мне бы хотелось, чтобы конечный результат был чем-то напоминающим то, как текстовый редактор Atom обрабатывает ядра водорода, а результат кода появляется слева от кода. Планируется создать привязку клавиш (<C-Enter> или <F5>) для автоматической оценки текущей строки и отображения результата.

2 ответа2

3

Если ваши строки выглядят так: 4+5 = вы можете использовать что-то вроде:

 :map  "_ay/=^Mo^[!!echo ^Ra \| bc^MkJ
  1. _ ............... чтобы перейти к началу текущей строки
  2. "AY /= ^ M ..., чтобы дергать до = в буфер A
  3. о ^ [ ........... сделать новую пустую строку
  4. !! .............. запустить программу оболочки, чтобы записать результат в эту новую строку
  5. ^ Ra .......... вставить содержимое буфера a в команду: echo ^ Ra \| Ьс ^ M
  6. к .............. перейти к предыдущей линии
  7. J .............. присоединить следующую строку (результат) к реальной строке
  8. возможно, вы хотите удалить пустое соединение с х

Я надеюсь, что это то, что вы есть.

2

Благодаря предложению Хорста, я смог разобраться, как заставить Vim сделать это с любым языком, у которого есть опция "оценивать" в командной строке. Для JavaScript команда, которую я собрал, выглядит следующим образом:

imap <F5> ^[_"ay$o//^[kJo^[!!node -e "^Ra"^MkJi
nmap <F5> _"ay$o//^[kJo^[!!node -e "^Ra"^MkJ

Для поломки:

  1. Для отображения режима INSERT Escape (^[) возвращается в нормальный режим.
  2. _"ay$ помещает всю строку в регистр a .
  3. o//^[kJ добавляет "//" для комментария.
  4. o^[ начинает другую новую строку.
  5. !!node -e "^Ra"^M запускает регистр (строку) через Node.js и возвращает результат в текущей строке.
  6. Наконец, kJ тянет эту новую строку обратно к первой, чтобы стать комментарием.
  7. (Для режима INSERT i снова возвращаю режим из NORMAL в INSERT .)

То же самое можно сделать для Python с несколькими незначительными правками:

imap <F5> ^[_"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJi
nmap <F5> _"ay$o#^[kJo^[!!python -c "import math; ^Ra"^MkJ

Для этого // комментарий заменяется на Python # . Кроме того, я автоматически импортирую math модуль, так как он может быть очень полезен для быстрых вычислений.

Я рекомендую поместить каждое из этих сопоставлений в соответствующие им ~/.vim/ftplugin/<language>.vim и set ftplugin on в свой .vimrc . Это позволяет изменять отображение в зависимости от того, с каким языком вы работаете!

Я надеюсь, что любой, кто хочет запустить код в Vim в интерактивном режиме, сможет найти это и, возможно, даже улучшить его. Огромное спасибо!"идет к Хорсту за ответ на этот вопрос и начало этого маленького проекта!

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .