Mở một tab mới trong cùng thư mục


41

Giả sử bạn đang ở trong thư mục / rất / cool / và / deep / lồng nhau. Và bạn muốn mở một tab thiết bị đầu cuối mới trong cùng một thư mục.

Bạn làm điều đó như thế nào?

Tôi sử dụng Mac OS và Zsh.

Câu trả lời:


62

Sử dụng Oh-My-Zsh và thêm plugin 'osx' trong ~ / .zshrc của bạn như sau:

plugins=(osx)

Nếu bạn sử dụng Ứng dụng đầu cuối của OSX, bạn cũng cần thêm terminalappplugin: tín dụng

plugins=(osx terminalapp)

Nếu bạn sử dụng iTerm, bạn cần đặt tùy chọn cấu hình ( Lưu ý rằng bạn có thể không cần plugin zsh để hoạt động này ): credit

Tùy chọn> Cấu hình> Mặc định> Chung> Thư mục làm việc> Sử dụng lại tùy chọn thư mục của phiên trước đó

Cập nhật bảng điều khiển iTerm2 Preferences để sử dụng lại thư mục phiên trước đó.

Đó là tất cả những gì bạn cần làm!


1
Điều này cũng hoạt động trong iTerm?
ahmy


2
Điều này làm việc cho tôi trừ khi tôi đang chạy một quy trình trong bảng điều khiển. Nếu tôi có một quy trình, giả railssử đang chạy và tôi cố gắng mở một cửa sổ mới thông qua lệnh-n, tôi sẽ quay lại thư mục chính của mình.
YWCA Xin chào

@YWCAHello bạn đã tìm ra giải pháp cho vấn đề này chưa?
Michał Miszczyszyn

@Miszy Tôi chuyển trở lại vanilla Bash: /
YWCA Xin chào

23

Một tùy chọn khác hiện có sẵn trong Mac OS X Lion là sử dụng tính năng tích hợp sẵn. Nó sử dụng 'chuỗi thoát' để tìm ra thư mục hiện tại. Đối với tôi nó hoạt động nếu tôi sử dụng các lệnh này trong .zshrc:

precmd () {print -Pn "\e]2; %~/ \a"}
preexec () {print -Pn "\e]2; %~/ \a"}

cũng có thể sử dụng PS1(đối với Bash, từ wiki này ):

export PS1="\[\e]2;\u@\H \w\a\e[32;1m\]>\[\e[0m\] "

nơi \e]2;là dãy thoát để in mọi thứ trong thanh tiêu đề. Có vẻ như Terminal.app đang lấy thông tin từ đó.

Thêm thông tin:


Ngoài ra, tôi nghĩ rằng oh-my-zsh có điều này theo mặc định. Tôi đã sử dụng cái này được một tuần rồi và nó hoạt động khá tốt.
Tim

Kể từ Mac OS X Lion 10.7, Terminal sẽ hiển thị thư mục làm việc bằng cách sử dụng biểu tượng proxy proxy trên thanh tiêu đề, có các tùy chọn để tạo các thiết bị đầu cuối mới trong cùng thư mục và hỗ trợ Tiếp tục các thiết bị đầu cuối. Để thuận tiện, Terminal sẽ xem xét nội dung của tiêu đề cửa sổ / tab để xem chúng có chứa tên đường dẫn hợp lệ hay không. Tuy nhiên, trong /etc/bashrcbạn sẽ thấy rằng nó cũng hỗ trợ mã thoát mới để thông báo cho Terminal của thư mục làm việc bằng file:URL, có thể xử lý tất cả các tên đường dẫn hợp lệ thông qua mã hóa phần trăm (tiêu đề cửa sổ / tab chỉ có thể chứa một tập hợp con các ký tự ASCII ).
Chris Trang

2
Trình tự thoát để thiết lập thư mục làm việc có cùng mã cơ bản như để đặt tiêu đề Lệnh Bộ điều hành hệ điều hành (OSC) Mã số 7 thay vì 0-2:\e]7;file://hostname/percent-encoded-pathname\a
Chris Trang

3
Tại sao nên sử dụng premd và preexec? Tại sao không chỉ chpwd () {print -Pn "\e]2; %~/ \a"}?
Nick

1
Tôi hiểu cách thức này cập nhật thanh tiêu đề, nhưng tôi không hiểu làm thế nào điều này khiến một tab mới mở trong cùng thư mục với tab trước đó.
mareoraft

3

Đây là một phiên bản rất đơn giản mà tôi đã sử dụng trong bash và cũng hoạt động trong zsh. Nó lưu thư mục hiện tại trong một tệp, sau mỗi lệnh (Không làm tổn thương quá nhiều IMO) và mở một thiết bị đầu cuối mới trong thư mục hiện tại đã lưu.

thêm phần sau vào .zshrc

# emulate bash PROMPT_COMMAND (only for zsh)
precmd() { eval "$PROMPT_COMMAND" }
# open new terminal in same dir
PROMPT_COMMAND='pwd > "${HOME}/.cwd"'
[[ -f "${HOME}/.cwd" ]] && cd "$(< ${HOME}/.cwd)"

Điều này thật tuyệt nhưng yêu cầu bạn thực sự thực hiện một lệnh trong tab để cập nhật. Điều này có thể trong trường hợp hiếm hoi gây ra hành vi bất ngờ. Có lẽ có một chức năng khác mà chúng ta có thể sử dụng được kích hoạt khi bạn chuyển tab thay vì chạy lệnh?
mareoraft

1

gdirs có vẻ như là một cách để làm điều đó: tab mới, sau đó gdirs để chọn thư mục sâu và voila. Ý tưởng đầu tiên của tôi là làm cho ngăn xếp thư mục được chia sẻ giữa tất cả các tab và thực hiện cd ~ 1 sau tab mới, nhưng tôi không thể tìm ra cách nào để làm điều đó, vì dường như mỗi trường hợp của zsh đều giữ riêng. Chia sẻ lịch sử thông qua một tệp chung, vì vậy có lẽ điều đó cũng có thể được thực hiện ở đây ...


0

Đây là cách bạn làm điều đó trong bash.

Kịch bản shell này sẽ cho biết (yên lặng theo nghĩa đen, sử dụng Applescript) Terminal.app để mở một tab mới sau đó chuyển sang thư mục hiện tại:

#!/bin/bash
osascript -e 'tell application "Terminal"' \
-e 'tell application "System Events" to tell process "Terminal" to keystroke "t" using command down' \
-e "do script with command \"cd `pwd`;clear\" in selected tab of the front window" \
-e 'end tell' &> /dev/null

Từ bỏ tập lệnh shell ở trên trong một thư mục trong $PATH(ví dụ / usr / local / bin) của bạn và đảm bảo rằng nó có thể thực thi được:

$ chmod +x /usr/local/bin/nt

( nguồn )


Lưu ý rằng kể từ Mac OS X Lion 10.7, theo mặc định, Terminal sẽ bắt đầu các tab mới trong cùng thư mục làm việc với tab trước đó. Vì vậy, bạn chỉ cần sắp xếp để tạo tab bây giờ. (Nếu bạn đang sử dụng bash Nếu bạn đang sử dụng vỏ khác, nhìn vào các mã trong / etc / bashrc cho làm thế nào để nói với nhà ga về các thư mục làm việc hiện tại..)
Chris Trang

0

Nếu bạn cần mở tab mới này ngay bây giờ, mà không thay đổi tệp cấu hình hoặc cài đặt plugin mới, hãy chạy nó:

pwd | pbcopy

Sau đó mở tab Terminal mới theo cách thủ công (với T) và trong tab mới:

cd "`pbpaste`"

Cảnh báo : điều này sẽ ghi đè lên nội dung của bảng tạm hệ thống.


Một phương pháp khác, dài hơn không ghi đè lên bảng tạm:

pwd > $TMPDIR/wd

Mở tab mới của bạn.

cd "$(cat $TMPDIR/wd)"
rm -f $TMPDIR/wd

0

Nhận xét của mỗi người dùng ở trên, một khi các plugins=(git osx)plugin được cài đặt, bạn chỉ cần nhập tabvà nó sẽ mở một tab mới trong thư mục hiện tại của bạn.


0

Nếu bạn muốn thư mục thay đổi tự động khi một tab mới được mở, hãy sử dụng plugin dirpersist .

Plugin osx chỉ lưu thư mục cuối cùng nhưng bạn phải chạy lệnh tabđể mở một tab mới, điều này không phải lúc nào cũng có thể (nếu, giả sử, bạn đang chạy một cái gì đó trong tab hiện tại của mình).


0

Thêm terminalapp vào .zshrc không hiệu quả với tôi nên tôi đã tìm plugin ~/.oh-my-zsh/plugins/terminalappvà nó cho tôi biết:

# This file is intentionally empty.
#
# The terminalapp plugin is deprecated and may be removed in a future release.
# Its functionality has been folded in to the core lib/termsupport.zsh, which
# is loaded for all users. You can remove terminalapp from your $plugins list
# once all your systems are updated to the current version of Oh My Zsh.

0

Các tab mới đã mở trong cùng một thư mục (Cmd + T). Đối với các cửa sổ mới (Cmd + N), giải pháp từ Pieter là đúng:

Tùy chọn> Cấu hình> Mặc định> Chung> Thư mục làm việc> Sử dụng lại tùy chọn thư mục của phiên trước đó

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.