Когда вы запускаете скрипт, создается новый шелл, но новый терминал для вывода ему не присваивается. Поэтому текстовый редатор, в данном случае vim, жалуется, что ему не с чем работать.
Есть два пути обойти это:
1. Запускать новый терминал, задав ему на выполнение запуск редактора:
terminator -x vim dp/$line/file
где terminator - один из доступных терминалов, для других читайте man;
2. Перенаправить ввод вызванного редактора на текущий терминал, воспользовавшись устройством /dev/tty, которое как раз представляет текущий терминал, из которого запускается скрипт:
vim dp/$line/file < /dev/tty
Второй вариант думаю более удобен для вашей задачи.