Используйте Notepad ++ от Cygwin, не заставляя оболочку ждать код выхода

19

Я использую Cygwin и хотел бы использовать Notepad ++ в качестве основного редактора оболочки, что-то вроде того, что у меня есть на моем Mac, где я могу печатать, mate whateverчтобы открыть экземпляр TextMate. В моем ~/.bashrcфайле в Cygwin у меня есть следующий псевдоним и переменная окружения:

export EDITOR="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
alias np="/cygdrive/c/Program\ Files/Notepad++/notepad++.exe"

В основном это работает: когда я печатаю np whateverили когда программа Cygwin вызывает $ EDITOR, открывается Notepad ++.

Тем не менее, оболочка ждет, пока Notepad ++ не закроется, и не будет допускать никакого ввода до тех пор. Это может быть характерно для bash, но как я могу открыть Notepad ++ из Cygwin и сказать оболочке не ждать продолжения кода выхода? Добавление &в конец команды псевдонима не работает правильно - она ​​просто открывает файл без названия и выдает предупреждение filename: command not foundвместо открытия файла.

Благодарность!

Андрей
источник

Ответы:

16

Вы можете попробовать bashфункцию для передачи аргументов перед амперсандом:

np ()
{
    /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $* &
}

НО большая проблема может заключаться в том, чтобы не ждать, пока выйдет Notepad ++. Команды оболочки, которые $EDITORобычно используются, предназначены для ожидания, пока редактор не отправит обратно указание о завершении редактирования. Обычно это означает, что редактор вышел (например, с помощью viили nano).

В Emacs есть способ установить EDITORего, emacsclientа затем, когда вы закончите редактирование, вы нажимаете волшебное нажатие клавиши ( C-x #), чтобы указать, что редактирование завершено. Если бы в Notepad ++ было что-то похожее для пользователей cygwin, я вижу, как это будет работать.

Другой альтернативой является использование простого, скучного, простого Блокнота в качестве редактора и резервный Блокнот ++ для интенсивного использования (идея пришла из этого поста в блоге )

Даг Харрис
источник
Круто - это сработало. Я собираюсь пойти с ванильным Блокнотом в качестве РЕДАКТОРА и Блокнотом ++ в качестве np ()
Эндрю
Блокнот также требует ожидания завершения редактирования
codezombie
8

Я решил это с помощью простой символической ссылки.

ln -s /cygdrive/c/Program\ Files\ \(x86\)/Notepad++/notepad++.exe ~/bin/npp

Конечно, ~ / bin находится в моем $ PATH.

Теперь, чтобы открыть файл, я просто набираю «npp filename.txt» в приглашении cygwin. Мне не приходилось использовать & в конце команды.

Это также добавит вкладку в текущее окно Notepad ++ вместо того, чтобы открывать другое - И если файл уже открыт, он не откроет его снова.

Этан Вон
источник
Как добавить ~ / bin в $ PATH?
Эрик Ф
3

экспорт EDITOR = "/ cygdrive / c / Program \ Files \ '(x86)' / Notepad ++ / notepad ++. exe"

псевдоним np = "/ cygdrive / c / Program \ Files \ '(x86)' / Notepad ++ / notepad ++. exe"

также работает для x86

mlanzero
источник
2

Просто добавьте пробел и амперсанд (&) в конце вашей команды, и оболочка немедленно вернется в режим ввода, оставив Notepad ++ открытым.

на редактирование:

Я не говорю о добавлении его в ваш псевдоним. Добавьте его в конец вашей команды следующим образом:

np whatever &

Роберт С Чаччо
источник
1
Ooh. Это выглядит хорошо до сих пор. Есть ли способ вставить это, .bash_profileчтобы мне не нужно было печатать все время?
Андрей
Я не эксперт по bash, но я предполагаю, что вы могли бы заставить свой псевдоним принимать переменную, которая является аргументом, а также включать амперсанд в конце. Кто-то умнее с Bash может дать вам точный синтаксис. Я только знал, как ответить на ваш вопрос, потому что я обычно делал то же самое, работая в среде разработки Windows :)
Robert S Ciaccio
Вы не можете заставить псевдоним принимать переменную в Bash. Вы должны использовать функцию или скрипт.
Приостановлено до дальнейшего уведомления.
1

Псевдонимы не принимают интерполированные аргументы. Вместо этого используйте функцию.

function np() { /cygdrive/c/Program\ Files/Notepad++/notepad++.exe $1 & }
garyjohn
источник
1
#!/bin/sh
/cygdrive/c/Program\ Files/Notepad++/notepad++.exe $@ &

Этот скрипт запускает Notepad ++ в фоновом режиме, передавая аргументы командной строки перед '&'

Как советовал Дуг , наличие по умолчанию, $EDITORкоторое не блокирует, может вызвать проблемы.

Leftium
источник
0

В cygwin есть специальная команда для выполнения этого. Убедитесь, что вы загрузили run.exe и убедитесь, что он находится в вашем PATH (или ваш PATH содержит исполняемый файл)

alias np="run.exe /cygdrive/c/Program\ Files/Notepad++/notepad++.exe"
Рич Гомолка
источник