Как создать новое окно на текущем каталоге в tmux?

Это не о добавлении, что дополнительная новая строка в конце файла, именно о не удалении новой строки должна быть там.

Текстовый файл, под Unix, состоит из серии строк, каждая из которых заканчивается символом новой строки (\n). Файл, который не пуст и не заканчивается новой строкой, является поэтому не текстовым файлом.

Утилиты, которые, как предполагается, воздействуют на текстовые файлы, не могут справиться хорошо с файлами, которые не заканчиваются новой строкой; исторические утилиты Unix могли бы проигнорировать текст после последней новой строки, например. Утилиты GNU имеют политику поведения прилично с нетекстовыми файлами, и также - большинство других современных утилит, но можно все еще встретиться с нечетным поведением с файлами, которые пропускают заключительную новую строку ¹.

С разностью GNU, если один из файлов, сравниваемых концы с новой строкой, но не другим, это старается отметить тот факт. Так как разность ориентирована на строку, она не может указать на это путем хранения новой строки для одного из файлов, но не для других — новые строки необходимы указать, где каждая строка в различном файле запускается и заканчивается. Таким образом, разность использует этот специальный текст \ No newline at end of file дифференцировать файл, который не закончился в новой строке из файла, который сделал.

Между прочим, в контексте C исходный файл так же состоит из серии строк. Более точно единица перевода просматривается в определенном реализацией как серия строк, каждая из которых должна закончиться символом новой строки (n1256 §5.1.1.1). В системах Unix отображение просто. На DOS и Windows, каждая последовательность CR LF (\r\n) отображается на новой строке (\n; это - то, что всегда происходит при чтении файла, открытого как текст на этих Ose). Существует несколько Ose там, которые не имеют символа новой строки, но вместо этого зафиксировали - или записи переменного размера; в этих системах отображение от файлов до источника C представляет a \n в конце каждой записи. В то время как это не непосредственно относится к Unix, это действительно означает, что, если Вы копируете исходный файл C, это пропускает его заключительную новую строку к системе с основанными на записи текстовыми файлами, затем скопируйте его назад, Вы или закончите с неполной последней строкой, усеченной в начальном преобразовании или дополнительной новой строке, прикрепляемой на него во время обратной конверсии.

¹ Пример: вывод вида GNU всегда заканчивается новой строкой. Таким образом, если файл foo пропускает его заключительную новую строку, Вы найдете это sort foo | wc -c сообщает еще один символ, чем cat foo | wc -c.

212
20.06.2018, 18:59
6 ответов

Запуск в tmux 1.9 default-path опция была удалена, таким образом, необходимо использовать -c опция с new-window, и split-window (например, путем повторного переплетения c, ", и % привязка для включения
-c '#{pane_current_path}'). См. некоторые из других ответов на этот вопрос для деталей.


Соответствующая функция, посаженная в tmux SVN, соединяет магистралью в начале февраля 2012. В сборках tmux, которые включают этот код, tmux привязки клавиш, которые вызывают new-window создаст новый окно с тем же текущим рабочим каталогом как активные процессы текущей области (как долго как default-path опция сессии пуста; это по умолчанию). То же верно для области, созданной split-window управляйте, когда это будет вызвано через привязку.

Это использует специальный определенный для платформы код, поэтому только определенные Ose поддерживаются в это время: Darwin (OS X), FreeBSD, Linux, OpenBSD и Солярис.

Это должно быть доступно в следующем выпуске tmux (1.7?).


С tmux 1.4 я обычно просто использую

tmux neww

в оболочке, которая уже имеет желаемый текущий рабочий каталог.

Если, однако, я ожидаю должным быть создать много окон с тем же текущим рабочим каталогом (или я хочу смочь запустить их с обычного <префикс>c привязка клавиш), затем я установил default-path опция сессии через

tmux set-option default-path "$PWD"

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

Если default-path установлен на непустое значение, его значение будет использоваться вместо того, чтобы “наследовать” текущий рабочий каталог от вызовов командной строки tmux neww.

tmux FAQ запись назвала, “Как я могу открыть новое окно в том же каталоге как текущее окно?” это описывает другой подход; это является немного замысловатым все же.

147
27.01.2020, 19:28
  • 1
    Есть ли способ, которым я могу отобразиться <prefix>c прочитать рабочий каталог базового экземпляра оболочки (если таковые имеются) и установить default-path до выполнения new-window. Или это слишком много для выяснения tmux :) –  Shrikant Sharat 27.04.2011, 08:34
  • 2
    Относительно другого примечания, даже возможно прочитать рабочий каталог базовой оболочки? Я уничтожил бы, чтобы отобразить его в моей строке состояния. –  Shrikant Sharat 27.04.2011, 08:34
  • 3
    Нет никакого портативного способа извлечь cwd другого процесса (хотя это возможно на некоторых платформах (например. /proc/PID/cwd на Linux)). Существует возможное частичное решение в записи tmux FAQ (это имеет запись оболочки ее cwd, когда это печатает подсказку, затем связывает ключ, который запускает новую оболочку в зарегистрированном каталоге). –  Chris Johnsen 27.04.2011, 10:14
  • 4
    хорошо, это немного вне объема для моего знания и не чувствует себя очень надежным. Что-то мне подсказывает, что я могу быть более обеспечен без всего этого.. спасибо так или иначе. –  Shrikant Sharat 27.04.2011, 11:57
  • 5
    @paradroid: Что-либо сделанное через привязку будет (по умолчанию) использовать cwd tmux сервера или значение default-path опция сессии (если это установлено). tmux FAQ имеет запись, которая описывает способ связать ключ, который запускает новое окно с cwd оболочки, работающей в текущем окне (“Как я могу открыть новое окно в том же каталоге как текущее окно?”), но метод является довольно замысловатым. То же могло, вероятно, быть сделано для split-window и new-session (вместо neww). –  Chris Johnsen 23.08.2011, 04:53

С последними версиями tmux (v1.8, но возможно в v1.7 также):

tmux new-window -c "$PWD"
10
27.01.2020, 19:28
  • 1
    Это, кажется, работает с окном с несколькими панелями также, например. tmux split-window -v -c "$PWD" –  user7089 05.11.2013, 19:53
  • 2
    $PWD кажется, не работает на меня в tmux 1.9a. Я должен был использовать pane_current_path как предложено выше. –  jordelver 16.10.2014, 16:39

Другие ответы не работают на меня, когда я пробую, помещает их как привязку (конкретно tmux split-window -c). Но я составил свое собственное решение, которое я использовал больше года, который работает и на новое окно и на разделения:

~/.bashrc:

PS1="$PS1"'$([ -n "$TMUX" ] && tmux setenv TMUXPWD_$(tmux display -p "#D" | tr -d %) "$PWD")'

~/.tmux.conf:

unbind-key c
bind-key c run-shell 'tmux new-window "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key C new-window

bind-key - run-shell 'tmux split-window -v "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"'
bind-key | run-shell 'tmux split-window -h "cd \"$(tmux show-environment $(echo "TMUXPWD_#D" | tr -d %) | sed -e "s/^.*=//")\"; exec $SHELL"

Работы, по крайней мере, с $ (tmux-V) 1.8. Посмотрите прокомментированные строки здесь для версии, работающей на более старые tmuxes, которые не имеют команды выставочной среды.

3
27.01.2020, 19:28

Да, используйте new-window -c "#{pane_current_path}". Можно добавить следующее к Вашему ~/.tmux.conf сделать это персистентным (принимающий привязки клавиш по умолчанию):

bind c new-window -c "#{pane_current_path}"
bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"

default-path установка пути была удалена из восходящего кода и tmux автора, рекомендуемого в том сообщении о фиксации с помощью также -c "#{pane_current_path}" или -c "$PWD в new-window и split-window команды.

Я также ответил в этом дублирующемся вопросе.

39
27.01.2020, 19:28

Текущая (1.9a) страница руководства Tmux содержит необязательный параметр -c start-directory для некоторых команд, включая новое окно и разделенное окно ]. Он также содержит переменную формата pane_current_path , которая ссылается на Текущий путь, если он доступен .

Объединив их, мы можем открыть новое окно с текущим рабочим каталогом, используя
new-window -c "# {pane_current_path}"
Цитата необходима в случае, если текущий путь содержит пробелы.

Если вы хотите разделить текущую панель по вертикали, используйте
split-window -c "# {pane_current_path}"
или, для горизонтального разделения
split-window -h -c "# { pane_current_path} "

Чтобы привязки клавиш открывали новые разделы и окна с текущим рабочим каталогом по умолчанию, добавьте следующее в ваш .tmux.conf . " с окружающими кавычками указывает Tmux, что он не должен начинать строку, а должен связывать ключ " .

bind '"' split-window -c "#{pane_current_path}"
bind % split-window -h -c "#{pane_current_path}"
bind c new-window -c "#{pane_current_path}"
285
27.01.2020, 19:28

tmux сделал это в версии 1.8, но в 1.9 эта функция была удалена в пользу использования флага -c .

Это можно решить, но повторно привяжите новое окно , но если вы захотите запустить что-то еще, это станет слишком многословным: вместо ввода neww man tmux у вас будет набрать neww -c "# {pane_current_path}" man tmux , чего вы, скорее всего, не хотите делать.

Есть мод tmux (я автор) для добавления в tmux подходящего языка сценариев, позволяющего использовать псевдонимы, связывать несколько команд в 'режиме', переменных, циклах и т. Д ... И Кроме того, он возвращает то поведение: в текущем каталоге открываются новые окна и панели.

Его можно построить из источников здесь: http://ershov.github.io/tmux/

0
27.01.2020, 19:28

Теги

Похожие вопросы