Dấu trang


24

Điều hướng một số lớp của các thư mục lồng nhau thường là một nỗi đau. Trên Firefox, thật dễ dàng vì chúng có dấu trang. Vì vậy, những gì tôi muốn làm để đánh dấu một tập tin là gõ:

$ go --add classes "repo/www/public/util/classes"

Sau đó, để vào thư mục này, tôi gõ:

$ go classes

Trước đây tôi đã sử dụng các liên kết tượng trưng, ​​để đạt được một cái gì đó tương tự, nhưng tôi không muốn làm lộn xộn thư mục nhà của mình. Có rất nhiều tính năng khác có thể hữu ích. Ví dụ: tôi muốn có thể bắt đầu nhập go clvà sau đó nhấn tab để tự động hoàn tất. Đôi khi tôi có nhiều bản sao của kho lưu trữ được kiểm tra và vì vậy nó sẽ hữu ích cho chương trình cho phép tôi tạo nhiều bối cảnh và đặt dấu trang liên quan đến thư mục cơ sở ngữ cảnh.

Vì vậy, trước khi tôi bắt đầu tập hợp các tập lệnh của riêng mình lại với nhau, đã có thứ gì như thế này chưa?



4
Nếu bạn tiếp tục so sánh bash với firefox, ai đó sẽ tạo một awesomebar cho bash :(
hhaamu

Câu trả lời:


12

Tôi đã tìm kiếm một số công cụ đánh dấu shell quá lâu và tôi không hài lòng với bất kỳ giải pháp nào tôi tìm thấy.

Tuy nhiên, cuối cùng tôi đã bắt gặp một công cụ tuyệt vời, phổ quát: công cụ tìm mờ dòng lệnh .

Nó chủ yếu cho phép bạn tìm các tập tin tìm kiếm mờ mờ (kiểm tra hoạt hình gif phong phú bằng liên kết ở trên), nhưng nó cũng cho phép cung cấp dữ liệu văn bản tùy ý cho nó và lọc dữ liệu này. Vì vậy, ý tưởng về các phím tắt rất đơn giản: tất cả những gì chúng ta cần là duy trì một tệp có đường dẫn (là các phím tắt) và lọc mờ tệp này. Đây là giao diện của chúng tôi: chúng tôi nhập cdglệnh (từ khăn cd toàn cầu, nếu bạn muốn), lấy danh sách các dấu trang của chúng tôi, chọn một dấu cần thiết chỉ trong một vài lần nhấn phím và nhấn Enter. Thư mục làm việc được thay đổi thành mục đã chọn:

cdg

Nó cực kỳ nhanh chóng và tiện lợi: thông thường tôi chỉ cần gõ 3-4 chữ cái của mặt hàng cần thiết và tất cả những thứ khác đã được lọc ra. Ngoài ra, tất nhiên chúng ta có thể di chuyển qua danh sách bằng các phím mũi tên hoặc bằng Ctrl+j/Ctrl+k .

Bài viết chi tiết về giải pháp phím tắt / đánh dấu này có ở đây: Phím tắt mờ cho trình bao của bạn .


19

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như autojump . Bạn phải cd khoảng một chút để phát triển một tập hợp "trọng số chính" tương quan với lượng thời gian dành cho một thư mục nhất định. Sau đó, giả sử bạn đã dành rất nhiều thời gian trong thư mục 'lớp' đó, bạn có thể nhảy trực tiếp đến đó bằng cách gõ

j cl

Bạn có thể xem "trọng số chính" của mình với

jumpstat

Gần đây tôi đã tìm thấy một công cụ phức tạp hơn một chút, nhưng thú vị và có liên quan, được gọi là f: github.com/clvv/f
tcdyl

14

Như saeedn đề cập, bí danh là một cơ chế tốt. Shell bash cũng có một cơ chế tích hợp để nhảy ngay đến một vị trí : CDPATH. Đặt nó như thế PATH, nhưng nó được sử dụng cdthay vì tìm kiếm các chương trình.

$ CDPATH=:~/repo/www/public/util
$ cd classes
/home/casebash/repo/www/public/util/classes

Từ trang hướng dẫn:

   CDPATH The search path for the cd command.  This is  a  colon-separated
          list  of  directories  in  which the shell looks for destination
          directories specified by the cd  command.   A  sample  value  is
          ".:~:/usr".

Chính tôi, tôi đã kết hợp điều này với một thư mục có liên kết tượng trưng đến nơi tôi muốn đến:

$ mkdir ~/cdshortcut
$ ln -s ~/repo/www/public/util/classes ~/cdshortcut/classes
$ CDPATH=:~/cdshortcut
/home/casebash/cdshortcut/classes

Điều này có nhược điểm là thư mục không hoàn toàn chính xác, nhưng có thể được chỉnh sửa bằng cách sử dụng cd -Phoặc cài đặt set -P.


CDPATH rất thú vị, nhưng có lẽ đáng sử dụng một lệnh go riêng để hành vi luôn có thể dự đoán được
Casebash

1
+1 cho bộ -P. Một số liên kết tượng trưng của tôi đã khiến tôi phát điên vì tôi không thể nhớ chúng thực sự đã đi đâu và không nhớ lệnh hiển thị thông tin đó.
Joe

@Joe, tôi sẽ thêm alias C='cd -P .'chứ không phải set -P, vì đối với các liên kết hệ thống, tôi không bận tâm đến thư mục symlink.
tự đại diện

@Wildcard - thú vị - bạn có thể đưa ra một ví dụ về điều này tạo ra sự khác biệt cho bạn không? Tôi chỉ chạy help cdvà vẫn không hiểu tùy chọn -P làm gì.
Joe

@Joemkdir test; ln -s test linktotest; cd linktotest; pwd; cd -P .; pwd
Wildcard

9

Bạn có thể kết hợp các tính năng tìm kiếm lịch sử và lịch sử hiện tại của Bash. Nhấn Ctrl-Rđể bắt đầu tìm kiếm ngược tăng dần, sau đó bắt đầu nhập một phần của đường dẫn có khả năng là duy nhất.

Bạn có thể tiếp tục nhập các chữ cái cho đến khi bạn kết thúc trở lại cdlệnh gần đây nhất liên quan đến thư mục đó hoặc bạn có thể nhấnCtrl-R lại để quay lại lịch sử với lệnh mới nhất tiếp theo khớp với những gì bạn đã nhập cho đến nay.

Tôi làm điều này tất cả các thời gian.

Thật ra, tôi tiến thêm một bước. Khi tôi bắt đầu khám phá chuỗi các lệnh giữ giá trị trong lịch sử nhưng không đáng cam kết một kịch bản shell, tôi bắt đầu chaining được kết chúng với &&;combinators vì vậy tôi có thể đảo ngược-tìm kiếm một chuỗi con của rằng một lệnh dài, hit Entervà chạy toàn bộ chuỗi tại Một lần.

Ví dụ: đây là cách tôi xây dựng và chạy một trong các chương trình của mình trong quá trình phát triển:

$ ( cd .. ; make install ) && ./start_my_program

Tôi làm điều này từ thư mục cài đặt, bên dưới thư mục nguồn cấp cao nhất. Bằng cách gói cd, xây dựng và cài đặt một phần trong vỏ phụ, tôi đảm bảo rằng bất kể điều gì xảy ra trong quá trình này, tôi sẽ trở lại trong vỏ bình thường của mình mà không có gì thay đổi. Chỉ khi điều đó thành công (&&) thì tôi mới bắt đầu chương trình được xây dựng và cài đặt. Tôi có thể tìm thấy điều này trong lịch sử của mình chỉ Ctrl-Rsau đó sta, đó là tất cả những gì tôi thường cần để tìm duy nhất chuỗi lệnh này.

Một ví dụ khác về cách tôi sử dụng điều này là trình tự xây dựng RPM cho cùng một chương trình. Hầu hết các công việc tẻ nhạt là trong các kịch bản shell, nhưng vẫn có một vài lệnh mà tôi thường phải gõ để thực hiện tất cả các công việc xây dựng và triển khai các RPM được xây dựng, mà bây giờ tôi hiếm khi phải gõ lại, vì Bash giữ nó trong lịch sử đối với tôi

Kết hợp tất cả điều này với export HISTSIZE=bignumshopt histappend bạn vừa xây dựng bộ nhớ lệnh voi.

Một giải pháp khác tôi đã mã hóa một lần là trong câu trả lời của tôi cho một câu hỏi khác ở đây . Nó có thể phải được điều chỉnh cho mục đích của bạn và nó chỉ xử lý cdcác lệnh, trong khi tùy chọn tìm kiếm lịch sử hoạt động ở mọi nơi và cho mọi lệnh.


6

Bản thân tôi sử dụng aliasđể rút ngắn những con đường dài mà tôi thường ghé thăm. Bạn có thể đặt tập hợp aliases của bạn bashrc, vì vậy bash có thể nhớ chúng mỗi khi bạn đăng nhập. Và may mắn thay, bash thêm bí danh để tự động hoàn thành.

Tôi sẽ viết một cái gì đó như thế này cho trường hợp của bạn: alias go-classes="cd ~/repo/www/public/util/classes"


6

Bạn có thể đang tìm kiếm bashmark (trên github).
Từ README:

Bashmark là một tập lệnh shell cho phép bạn lưu và chuyển đến các thư mục thường được sử dụng. Bây giờ hỗ trợ hoàn thành tab.


4

Đây không phải là cách hoàn thành cũng không phải bằng chứng ngu ngốc, chỉ là một bản nháp để bắt đầu. Bằng cách thêm các mục sau vào, ~/.bashrcbạn sẽ có ba lệnh để thêm xóa và liệt kê dấu trang thư mục (dựa trên bí danh shell, do đó bạn cũng sẽ tự động hoàn thành).

BMFILE=~/.bash.bookmarks
[ -f "$BMFILE" ] && . "$BMFILE"

bmadd() {
    local abm
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    abm="alias $bm='cd \"$(pwd)\"'"

    if grep -q " $bm=" "$BMFILE"; then
        echo "Overwriting existing bookmark $bm"
        bmdel "$bm"
    fi
    echo "$abm" >> "$BMFILE"
    eval "$abm"
    #source "$BMFILE"
}

bmdel() {
    local bms
    if [[ $# = 0 ]]; then
        bm=$(basename $(pwd))
    else
        bm=$1
    fi

    #sed -i.bak "/ $bm=/d" "$BMFILE"
    bms=$(grep -v " $bm=" "$BMFILE")
    echo "$bms" > "$BMFILE"
    unalias "$bm" 2> /dev/null
}

bmlist() {
    sed 's/alias \(.*\)=.cd "\(.*\)".$/\1\t\2/' "$BMFILE" | sort
}

Cách sử dụng khá đơn giản. bmaddvới một đối số thêm một bí danh được đặt tên theo đối số. Bí danh này chỉ tạo một cd cho thư mục mà nó được đặt. Không có đối số, nó sử dụng tên thư mục hiện tại làm tên bí danh. Theo cách tương tự, bmdelxóa bí danh nếu tồn tại và bmlistliệt kê các dấu trang hiện tại.

ví dụ

u@h:~ $ cd /usr/share/doc
u@h:/usr/share/doc $ bmadd
u@h:/usr/share/doc $ cd /usr/local/share/
u@h:/usr/local/share $ bmadd lshare
u@h:/usr/local/share $ cd
u@h:~ $ bmlist
doc     /usr/share/doc
lshare  /usr/local/share
u@h:~ $ doc
u@h:/usr/share/doc $ bmdel lshare
u@h:/usr/share/doc $ bmlist
doc     /usr/share/doc
u@h:/usr/share/doc $

4

Tôi đã bắt gặp cùng một nhu cầu cách đây một thời gian và quyết định kết hợp một vài tập lệnh để giúp tôi đánh dấu các đường dẫn tuyệt đối / tương đối và ánh xạ chúng thành các tên ngắn hơn mà tôi có thể nhớ dễ dàng.

Kịch bản này rất dễ sử dụng và nó sẽ chỉ tạo một hàm có tên ngắn mà bạn cung cấp dưới dạng bí danh cho thư mục mà bạn muốn nhảy vào. Tất cả những gì bạn cần làm chỉ đơn giản là gõ tên ngắn đó và nó sẽ đưa bạn đến thư mục được đánh dấu.

Đây là một liên kết đến nguồn của tập lệnh bookmarker. Nhân tiện, tôi đặt tên cho nó là Bookmarker.

Sử dụng

Sau khi cài đặt, nó khá tầm thường để sử dụng.

Để đánh dấu một thư mục:

$ mark /this/is/a/very/very/looooong/path mydir

Để điều hướng đến một dirctory được đánh dấu:

$ mydir

Để xem những gì đã được đánh dấu:

$ marks
bin     -> /Users/khafaji/bin
eBooks  -> /Users/khafaji/eBooks

Để xóa một thư mục được đánh dấu:

$ umark myDir

Để biết thêm ví dụ, hướng dẫn cài đặt, vv xem tài liệu rất chi tiết .


3

cdargs là công cụ tốt nhất để đánh dấu thư mục.

Để biết ví dụ sử dụng, hãy xem dấu trang cho video lệnh cd trên YouTube.

Cách sử dụng ví dụ

cdargslà một GUI ncurses để bạn có thể điều hướng trực quan trong vỏ của mình. Khi nó được cài đặt, bạn thiết lập nó trong một shell nhất định bằng cách tìm nguồn script shell:

$ source /etc/profile.d/cdargs.sh

Điều này cho phép một số chức năng mà sau đó bạn có thể gọi từ vỏ của mình.

Triệu tập GUI:

$ cv

Kết quả trong loại GUI này:

   [.       ]  /home/saml/tst/88040
 0 [path0   ]  /home/saml/tst/88040/path0
 1 [path1   ]  /home/saml/tst/88040/path1
 2 [path2   ]  /home/saml/tst/88040/path2

Bạn có thể sử dụng các phím mũi tên để di chuyển lên và xuống để điều hướng danh sách. Mũi tên trái ( ) đi lên một cấp trong cây thư mục, một mũi tên phải ( ) sẽ đi sâu vào một thư mục.

đánh dấu thư mục:

Bạn có thể sử dụng ccho thư mục hiện tại bạn điều hướng hoặc bạn có thể sử dụng ađể thêm thư mục mà bạn hiện đang tô sáng bằng con trỏ.

chế độ hoạt động:

cdargslà một chút giống như vi / vim về vấn đề này, nơi nó có khái niệm về các chế độ . Có 2 trong số đó, duyệt (B) và liệt kê (L). Bạn có thể thấy bạn đang ở chế độ nào thông qua màn hình ở dưới cùng của vỏ.

Chế độ liệt kê:

L: /home/saml/tst/88038

Chế độ duyệt web:

B: /home/saml/tst/88038

Bạn có thể thay đổi chế độ của mình bằng cách nhấn phím tab (TAB ).

Đây chỉ là phần nổi của tảng băng trôi, tham khảo trang man ( man cdargs) và cũng là trợ giúp tích hợp để biết thêm thông tin.


2

Công cụ tốt nhất cho việc này là: wcd . Tôi đã thử nghiệm nhiều công cụ khác, và công cụ này được sử dụng chính xác theo cách bạn đang hỏi và nó tốt hơn trong nhiều ý nghĩa so với tất cả các giải pháp trước đây.


1

Các câu trả lời khác là rất lớn và cụ thể. Một cách khác để xem xét nó là sử dụng bộ xử lý macro bàn phím có thể làm hầu hết mọi thứ bạn có thể nghĩ tới.

Kiểm tra AutoKey. Nó có thể thay thế các cụm từ như trình xử lý văn bản tự động sửa lỗi hoặc lịch sử bash và nó cũng có thể chạy tập lệnh python trên một phím nóng mà bạn xác định có thể làm hầu hết mọi thứ và cũng gửi tổ hợp phím đến thiết bị nhập ký tự của bạn - giống như khi bạn nhập chúng.

"Thiếu sót" duy nhất mà nó có (liên quan đến câu hỏi này) là nó cần một gui để chạy trong - gnome hoặc kde. Các câu trả lời khác không có yêu cầu này.

https://code.google.com/p/autokey/

1

Có một cách khác là z .

Nó học trên mỗi thay đổi thư mục:

$ cd /tmp/
$ pwd
/tmp
$ cd
$ pwd
/home/user

Sau đó, bạn có thể thay đổi thư mục đó sau với kết hợp mờ:

$ z mp
$ pwd
/tmp

1

Rõ ràng là một công cụ khác làm điều này. Một trong những tính năng hữu ích của nó là bạn có thể chuyển trực tiếp đến các thư mục con của nhãn hiệu và hoàn thành tab trên các thư mục con đó.


0

Một giải pháp khác, tôi tin rằng, là autojumpzfasd.

Nó theo dõi những thư mục bạn truy cập và z dir-namesẽ thay đổi thành thư mục có têndir-name mà bạn sử dụng thường xuyên nhất. Nó cũng có một số chức năng cho các tập tin thường xuyên sử dụng.

Bạn có thể sao chép nó từ: https://github.com/clvv/fasd

Cài đặt đơn giản, sao chép, thực hiện cài đặt và sau đó sửa đổi .bashrc(hoặc .zshrcvv) của bạn.


0

Bạn cần thêm một bí danh cho .bashrchoặc .bash_profile.

## navigate to your home directory
$ cd ~
## list the contents of your home directory to see if you have `.bashrc` or `.bash_profile`
$ ls -a 
[`.bashrc` or `.bash_profile` should appear in the list]
## launch the text editor of your choice; I'll use vim here
## if no `~/.bashrc` or `~/.bash_profile`...
$ vim
## if, e.g., `~/.bash_profile` listed...
$ vim ~/.bash_profile

Bây giờ, giả sử bạn muốn một lối tắt đến ~/Desktop/Coding/Projects, để gọi mà bạn sẽ gõ goto_Projs. Bạn cần thêm dòng sau vào tệp đang mở trong trình soạn thảo văn bản:

alias goto_Projs='cd ~/Desktop/Coding/Projects'

Bây giờ hãy làm bất cứ điều gì trình soạn thảo văn bản của bạn muốn bạn làm để lưu (đến /User/<yourusername>/hoặc ~/tất nhiên) và thoát, và khi dấu nhắc shell được trả về, hãy đi

source ~/.bash_profile

Bí danh của bạn bây giờ sẽ có sẵn để gọi như mô tả ở trên.


0

Tôi sử dụng phương pháp nối thêm một bình luận vào cuối lệnh và sau đó gọi ctrl Rđể tìm kiếm ngược lại cho bình luận. Điều này có những ưu điểm sau:

  • tìm kiếm một lệnh trong ngôn ngữ tự nhiên
  • thay đổi nhận xét bất cứ lúc nào và nhận được bản cập nhật mới nhất từ ctrl R
  • sử dụng ctrl Rtabnhanh chóng để thực hiện các điều chỉnh nhỏ cho chính lệnh, do đó làm cho nhận xét trở thành một loại phím tắt chung cho một họ các lệnh tương tự
  • không cần thiết lập, cài đặt hoặc giữ sách :-)
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.