Это не о добавлении, что дополнительная новая строка в конце файла, именно о не удалении новой строки должна быть там.
Текстовый файл, под 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
.
Запуск в 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 запись назвала, “Как я могу открыть новое окно в том же каталоге как текущее окно?” это описывает другой подход; это является немного замысловатым все же.
С последними версиями tmux (v1.8, но возможно в v1.7 также):
tmux new-window -c "$PWD"
tmux split-window -v -c "$PWD"
– user7089
05.11.2013, 19:53
$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, которые не имеют команды выставочной среды.
Да, используйте 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
команды.
Я также ответил в этом дублирующемся вопросе.
Текущая (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}"
tmux сделал это в версии 1.8, но в 1.9 эта функция была удалена в пользу использования флага -c
.
Это можно решить, но повторно привяжите новое окно
, но если вы захотите запустить что-то еще, это станет слишком многословным: вместо ввода neww man tmux
у вас будет набрать neww -c "# {pane_current_path}" man tmux
, чего вы, скорее всего, не хотите делать.
Есть мод tmux (я автор) для добавления в tmux подходящего языка сценариев, позволяющего использовать псевдонимы, связывать несколько команд в 'режиме', переменных, циклах и т. Д ... И Кроме того, он возвращает то поведение: в текущем каталоге открываются новые окна и панели.
Его можно построить из источников здесь: http://ershov.github.io/tmux/
<prefix>c
прочитать рабочий каталог базового экземпляра оболочки (если таковые имеются) и установитьdefault-path
до выполненияnew-window
. Или это слишком много для выяснения tmux :) – Shrikant Sharat 27.04.2011, 08:34/proc/PID/cwd
на Linux)). Существует возможное частичное решение в записи tmux FAQ (это имеет запись оболочки ее cwd, когда это печатает подсказку, затем связывает ключ, который запускает новую оболочку в зарегистрированном каталоге). – Chris Johnsen 27.04.2011, 10:14default-path
опция сессии (если это установлено). tmux FAQ имеет запись, которая описывает способ связать ключ, который запускает новое окно с cwd оболочки, работающей в текущем окне (“Как я могу открыть новое окно в том же каталоге как текущее окно?”), но метод является довольно замысловатым. То же могло, вероятно, быть сделано дляsplit-window
иnew-session
(вместоneww
). – Chris Johnsen 23.08.2011, 04:53