Sử dụng msysgit / Cảnh Git cho Windows Trực tiếp để điều hướng các phím tắt Windows?


7

Tôi sử dụng msysgit trên Windows để sử dụng git, nhưng tôi thường muốn điều hướng qua kiểu Windows *.lnk đường tắt. Tôi thường quản lý cấu trúc tệp của mình thông qua trình thám hiểm của Windows, vì vậy sử dụng một loại phím tắt khác (như tạo liên kết cứng hoặc mềm trong git) là không khả thi. Làm thế nào tôi có thể điều hướng thông qua các loại phím tắt?

Ví dụ:

PCUser@PCName ~
$ cd Desktop

PCUser@PCName ~/Desktop
$ ls
Scripts.lnk

PCUser@PCName ~/Desktop
$ cd Scripts.lnk
sh.exe": cd: Scripts.lnk: Not a directory

Có thể thay đổi hành vi này, để thay vì gặp lỗi, nó chỉ đi đến vị trí của thư mục? Ngoài ra, có một lệnh để có được đường dẫn trong một *.lnk tập tin?

CHỈNH SỬA : Tôi đã nghe nói rằng nghịch đảo của điều này tồn tại cho Cygwin, cho phép bạn tạo một liên kết tượng trưng hoạt động với explorer.


2
Không thực sự là một câu trả lời cho câu hỏi của bạn, nhưng nếu bạn sử dụng mklink lệnh để tạo một liên kết mềm NTFS Tôi nghĩ rằng nó sẽ hoạt động như bạn muốn.
jcrawfordor

Câu trả lời:


6

* ahem *

Đầu tiên, biên dịch sau đây Tự động kịch bản:

FileGetShortcut, %1%, shortcut_target
FileAppend, %shortcut_target%, *
ExitApp

Đặt .EXE tập tin trong một %CON ĐƯỜNG% danh mục. Tôi đặt tên cho tôi follow.exe.

Bây giờ, bạn có thể theo dõi Windows một cách hiệu quả .LNK tập tin trong thư mục làm việc của bạn bằng cách sử dụng cú pháp sau:

cd `follow Shortcut.lnk`

Ở đâu Shortcut.lnk 'S Mục tiêu là một thư mục hợp lệ.


Trình diễn:

shortcut

git bash


Khi bạn đã thiết lập follow.exe, bạn có thể thêm chức năng shell sau vào ~/.bashrc tập tin để đơn giản hóa cú pháp hơn nữa. Cảm ơn, Daniel !

function cd
{
    if [[ ".lnk" = "${1:(-4)}" && -f "$1" ]] ;
        then builtin cd "$( follow "$1" )" ;
    else builtin cd "$1" ;
    fi
}

Bây giờ, bạn có thể làm theo .LNK tập tin chỉ cd!

cd Shortcut.lnk

Trình diễn:

cd


Điều đó thật tuyệt! Tôi đã thực sự học về cách sử dụng cú pháp đánh dấu để đánh giá các lệnh, nhưng câu trả lời này cung cấp bước chính xác mà tôi đã thiếu. Cảm ơn!! Tôi chỉ tò mò về một điều - điều này có hoạt động đối với các ổ đĩa được ánh xạ mạng và / hoặc các vị trí mạng không? Tôi không đặc biệt cần nó cho việc này, nhưng nó sẽ hữu ích để biết. :)
Darthfett

Nếu bạn có thể cd để Mục tiêu như được đặt trong tệp lối tắt (ví dụ: xem ảnh chụp màn hình đầu tiên), sau đó nó sẽ hoạt động. Điều này chỉ giúp bạn tiết kiệm một vài bước với sự trợ giúp của AutoHotkey. :)
iglvzx

1
Rất tuyệt. Sử dụng chức năng shell cd, bạn có thể tự động làm điều này khi chuyển sang tập tin lnk.
Daniel Beck

@DanielBeck Nếu bạn có thể thêm các bước để thiết lập chức năng shell, điều đó thật tuyệt!
iglvzx

1
Không có Bash trên Windows ngay bây giờ để kiểm tra, nhưng nó hoạt động như được mô tả ở đây . Điều này có thể làm việc cho định nghĩa hàm: function cd { if [[ ".lnk" = "${1:(-4)}" && -f "$1" ]] ; then builtin cd "$( follow "$1" )" ; else builtin cd "$1" ; fi }. Nếu bạn cd một tập tin được đặt tên *.lnk, sử dụng cd với follow, nếu không sử dụng thường xuyên cd.
Daniel Beck

3

Có vẻ như không thể vào lúc này và cách tiếp cận được đề xuất là sử dụng Ngã ba tiện ích:

Về việc tạo biểu tượng trên msys

Cập nhật:

Cảm ơn bạn iglvzx cho câu trả lời của bạn.

Tuy nhiên, trong trường hợp của tôi, đôi khi bash autocompionion đặt một / sau phím tắt, như cd /f/downloads/scripts.lnk/, vì vậy tôi sử dụng nó như một cái cớ để chơi với bash scripting và điều chỉnh tập lệnh của bạn, đồng thời kiểm tra các phím tắt không được chấp nhận (bị hỏng hoặc trỏ vào tệp):

cd() {

    shopt -s nocasematch

    if [[ -z "$1" ]];
        then
            echo Error: missing operand;
            return 1;
    fi;

    if [[ "$1" == "/" ]];
        then
            destination=$1;
        else
            destination=${1%/};
    fi;

    extension=${destination##*.}

    if [[ -f "$destination" && $extension == "lnk" ]];
        then

            finaldestination=`follow "$destination"`;

            if [[ -z "$finaldestination" ]];
                then
                    echo Error: invalid destination;
                    return 2;
            fi;

            if [[ -f "$finaldestination" ]];
                then
                    echo Error: destination is a file;
                    return 3;
            fi;

            builtin cd "$finaldestination";

        else
            builtin cd "$destination";
    fi;
}

Tôi ước tôi cũng có thể đưa tiền thưởng cho câu trả lời của bạn, vì nó trả lời câu hỏi, rằng nó không tồn tại. Điều này rất tốt để biết, nhưng vấn đề là tôi không thấy việc quản lý tệp đơn giản hơn trong một thiết bị đầu cuối - Tôi quản lý các tệp và lối tắt của mình bằng trình thám hiểm và do đó không thể tạo liên kết tượng trưng. Cảm ơn rất nhiều!
Darthfett

Ý tưởng tốt để bỏ qua bất kỳ dấu vết / nhân vật. MinGW dường như thêm một khoảng trống cho tôi. tôi nghĩ sh.exe đã thực hiện kiểm tra đích cho bạn, vì vậy đó là công việc không cần thiết cho tập lệnh. Điều thú vị sẽ thấy là tự động hoàn thành cho thư mục đích.
Darthfett

1

Mở phím tắt từ bên trong msys là có thể với cmd thông qua /C cờ:

cmd //C "C:\Shortcut.lnk"

Nếu đó là lối tắt đến thư mục, nó sẽ được mở. Dấu gạch chéo phải trốn thoát vì vậy msys không chuyển đổi /C đến C:\.

Đường dẫn tương đối cũng hoạt động và trích dẫn không cần thiết cho đường dẫn đơn giản. Nếu lnk tập tin trong thư mục hiện tại:

cmd //C Shortcut.lnk

1

Nếu bạn tạo một liên kết tượng trưng (sử dụng mklink /D <link name> <target dir> từ cmd với đặc quyền quản trị viên) thay vì lối tắt, git bash có thể theo nó với cd -P <link name>.


Đó không phải là một ý tưởng tồi, nhưng ban đầu tôi đã cố gắng quản lý các phím tắt của mình một cách nghiêm ngặt thông qua GUI và không có giải pháp đơn giản nào trong GUI để tạo một liên kết tượng trưng. Có lẽ làm cho quá trình đó dễ dàng hơn sẽ là một cách khác để có được hành vi tương tự trong GUI và dòng lệnh.
Darthfett

Đó là một điểm hay. Bạn không thể tạo liên kết tượng trưng trong trình duyệt tệp, nhưng bạn có thể theo dõi chúng từ trình duyệt tệp như cách tắt. BTW, tôi nghĩ rằng điều này chỉ hoạt động trên windows 10.
user4757074

0

Wow, cách tiếp cận tuyệt vời iglvzx ! Tôi khuyên bạn nên cải thiện một chút ~/.bashrc kịch bản sao cho đơn giản cd không có bất kỳ đối số nào vẫn thay đổi thư mục chính của người dùng.

function cd
{
    if [[ ".lnk" = "${1:(-4)}" && -f "$1" ]] ;
        then builtin cd "$( follow "$1" )" ;
    elif [[ -z "$1" ]] ;
        then builtin cd ;
    else 
        builtin cd "$1" ;
    fi
}

Nếu đây là một cải tiến cho một câu trả lời khác - có vẻ như nó là như vậy, được thực hiện tốt! -- bạn có thể gửi nó dưới dạng chỉnh sửa với câu trả lời đó :)
bertieb
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.