Многострочная вставка в jshell

Я пробовал jshell и не смог найти возможность вставить несколько строковых выражений. Можно ли даже вставить несколько строк в jshell. Подобно тому, что предлагает scala с paste mode.


person Kunal Kanojia    schedule 24.01.2017    source источник
comment
По словам Роберта Филда, это было исправлено из-за этой ошибки. Это все еще проблема для вас?   -  person Sᴀᴍ Onᴇᴌᴀ    schedule 31.08.2017
comment
Просто заключите многострочный код в фигурные скобки и вставьте.   -  person Damith    schedule 26.07.2019


Ответы (4)


Итак, если у вас есть такой код:

 int c = 2;
 int j = 4;
 int x = 5; 

Скопируйте и вставьте в jshell, обрабатываются только первые два оператора.

Но если у вас есть такой код:

  int c = 2; int j = 4; int x = 5;

И вставьте в jshell:

jshell> int c = 2; int j = 4; int x = 5;
        c ==> 2
        j ==> 4
        x ==> 5 

Еще больше таких строк кода:

HashMap<Integer, Integer> map2 = new HashMap<>(); for (int i = 0; i < 15; ++i) { map2.put(i, i);map2.put(i, i); } System.out.println(map2);

на самом деле будет работать.

Почему? Я не знаю.

Единственный способ, которым я знаю, что копирование/вставка будет работать, - это через (введите его в jshell):

/редактировать

и вы можете вставить столько, сколько хотите.

person Eugene    schedule 24.01.2017
comment
Спасибо. Мне просто интересно, не упустил ли я что-то или какую-то недокументированную команду. - person Kunal Kanojia; 25.01.2017
comment
Просто обратите внимание, что JSHELL учитывает переменные среды предпочтений редактора, такие как JSHELLEDITOR, VISUAL и EDITOR. Чтобы использовать другие редакторы, такие как Vim, например, export JSHELLEDITOR=vim. Для всех синопсисов /edit введите /help /edit внутри jshell. - person Quar; 06.06.2019
comment
Отметив, что по крайней мере на данный момент (середина 2020 г.) вставка первого примера кода работает отлично. - person Dave Newton; 31.07.2020
comment
@DaveNewton ах! хорошо знать. вы можете отредактировать ответ с этой информацией, если хотите - person Eugene; 31.07.2020

На всякий случай, если люди все еще попадают сюда, небольшая настройка для вставки всего блока кода в jshell заключается в заключении его в фигурные скобки {} следующим образом:

{
 int c = 2;
 int j = 4;
 int x = 5; 
 // access these only in this scope though
 System.out.println("c : " + c + ", j : " + j + ", x = " + x);
}

Пример экрана:

введите описание изображения здесь

person Naman    schedule 25.12.2018
comment
Хороший совет. Играя с jshell сниппетами, я обнаружил, что удобнее (по крайней мере, для меня) настроить внешний редактор (в моем случае Notepad++) для простого ввода нескольких строк сниппетов. Соответствующие подробности описаны в документации JShell: Внешний редактор; Примечание! Чтобы запустить код, введенный с помощью внешнего редактора, вы должны закрыть ваш редактор, после чего код будет выполнен. - person informatik01; 22.04.2019

Я пробовал, и обрабатываются только первые две строки. Также пробовал с дополнительными символами новой строки в конце и более чем тремя строками, и все равно обрабатывались только первые две строки. Не знаю почему, но подозреваю, что это баг.

person Jay    schedule 24.01.2017

Это была ошибка. Исправлено: https://bugs.openjdk.java.net/browse/JDK-8169595

person Robert Field    schedule 30.08.2017
comment
Вроде исправили проблему с зависанием, но больше 2-х строк не могу вставить (сборка 9+181) - person Hugues M.; 02.09.2017