Sử dụng cảm ứng và vi?


55

Có lợi ích gì khi tạo một tệp bằng cảm ứng trước khi chỉnh sửa .. như:

touch foo
vi foo

so với việc đưa nó vào biên tập ngay lập tức? Như:

vi foo

Tôi thấy khá nhiều hướng dẫn sử dụng trước đây ( touchsau đó vi).

Câu trả lời:


111

touchTrước tiên, tệp xác nhận rằng bạn thực sự có khả năng tạo tệp, thay vì lãng phí thời gian trong trình chỉnh sửa chỉ để biết rằng hệ thống tệp chỉ đọc hoặc một số vấn đề khác.


6
touchcho phép bạn thực hiện chmod +xsau đó, trước khi chỉnh sửa, điều này sẽ có ý nghĩa nếu bạn đang viết một #!/bin/bashkịch bản shell.
Aaron McDaid

11
Ngoài ra, bạn chỉ có thể làm điều :wđầu tiên sau khi bắt đầu vimặc dù. (và :chmod +x %nếu bạn muốn làm cho nó có thể thực thi được)
Stéphane Chazelas

26
touchcó thể thất bại ở đâu vi's :w!sẽ thành công mặc dù (ví dụ nếu filetồn tại nhưng bạn không phải chủ sở hữu của nó và không có quyền ghi vào nó, trong khi bạn có quyền ghi vào thư mục hiện hành). Ngược lại, touchcó thể thành công nhưng vi's :whoặc :w!có thể thất bại nếu bạn là chủ sở hữu của tập tin, nhưng không có quyền ghi vào nó cũng không vào thư mục hiện (bạn có thể làm việc xung quanh nó với :!chmod +w %(một số vitriển khai như vimcó thể làm tự động khi :w!)).
Stéphane Chazelas

làm cho rất nhiều ý nghĩa bây giờ!
Fawix

4
Vim / vi nêu rất rõ nếu bạn mở một tệp mà bạn không có quyền ghi vào : "foo" [readonly]. Và một lần nữa khi vào chế độ chèn:Warning: Changing a readonly file.
DevSolar

25

Ngoài các câu trả lời đã cho, một ưu điểm của cảm ứng là bất kỳ người dùng / thiết bị đầu cuối nào khác chỉnh sửa cùng một tệp trong khi bạn chạm vào nó, sẽ nhận được cảnh báo khi họ cố gắng lưu bất kỳ thay đổi nào.

WARNING: The file has been changed since reading it!!!
Do you really want to write to it (y/n)?

Điều này sẽ cảnh báo họ ngay cả khi bạn không thực hiện bất kỳ thay đổi nào và chỉ chạm vào tệp.


điểm tốt, vì vậy về cơ bản đó là một cách tốt để khám phá nếu mọi người đang sử dụng / chỉnh sửa cùng một tệp và cảnh báo họ cùng một lúc. Tôi thấy một lợi ích rõ ràng của điều đó trong một môi trường nhiều người thuê nhà!
Fawix

@Fawix thì bạn nên cập nhật câu trả lời này Aswell
Kiwy

19

Ngoài câu trả lời được chấp nhận:

Điều đáng chú ý touchlà được sử dụng để cập nhật dấu thời gian của tệp. Nếu bạn sử dụng touchtrên một tệp tồn tại, thì nó sẽ cập nhật dấu thời gian của tệp thành ngày và giờ hiện tại. Nếu tệp không tồn tại, nó sẽ tạo một tệp trống với ngày và giờ hiện tại là dấu thời gian.

vimặt khác, không tạo một tệp mới trừ khi bạn ghi vào nó.

Ví dụ, nếu tôi gõ vi test.txt, gõ một số ghi chú, sau đó gõ :q!; test.txtsẽ không tồn tại


Điều gì về lợi ích được mô tả trong câu trả lời được chấp nhận?
JBentley

8

Nếu không touch, một tập tin mới sẽ không tồn tại cho đến khi bạn yêu vicầu viết nó.

Hãy xem xét một hệ thống nhiều người dùng (có lẽ bạn đang ở trên một hệ thống tệp gắn trên mạng được chia sẻ bởi nhiều hệ thống, mỗi hệ thống có nhiều người dùng). Chạy touchsẽ đảm bảo bạn có tệp (và bạn có thể ghi vào tệp đó) và thậm chí cập nhật dấu thời gian. Một người dùng khác muốn tạo một tệp như vậy sẽ thấy rằng bạn sở hữu nó. Nếu nó đã tồn tại và một người dùng khác muốn xóa hoặc thay thế nó, họ sẽ thấy rằng nó đã được sửa đổi gần đây và có thể suy nghĩ hai lần.


4

Không có lợi ích để touching đầu tiên; visẽ tạo tập tin nếu nó không tồn tại.

Câu trả lời được chấp nhận cho biết nó kiểm tra xem bạn có thể viết ở đó trước khi lãng phí thời gian trong trình chỉnh sửa hay không. Đúng, nhưng bây giờ bạn sẽ lãng phí thời gian gõ touchmỗi lần. Không thể viết ở đâu đó là khá đặc biệt so với tần suất nó sẽ hoạt động (miễn là bạn nhớ sudocác tệp bên ngoài thư mục chính của bạn hoặc /tmp, hoặc đăng nhập dưới dạng root).

Chỉ cần mở trình chỉnh sửa và làm những gì bạn muốn, sau đó cố gắng lưu tệp. Nếu nó không hoạt động, ngay cả với :w!, hãy lưu nó ở nơi khác ( :w ~/asdf) và khắc phục sự cố. Khi nó được sửa, bạn có thể sao chép nội dung tệp từ tệp tạm thời sang bản gốc : cat ~/asdf > /mnt/example.txt && rm ~/asdf. Lý do chúng tôi sử dụng catthay vì mvhoặc cplà để sử dụng quyền của đích và các thuộc tính khác.

Ngoài ra, đối với một số cách sử dụng dòng lệnh nâng cao hơn, bạn có thể làm nền vivới Ctrl+ Ztrong khi bạn khắc phục sự cố (hoặc sử dụng :suspendhoặc :sus) và cuối cùng fglà chạy lại lệnh ghi.

Chỉnh sửa: bài đăng được cải thiện để phản hồi bình luận của / u / G-Man . Cảm ơn!


3
Có một số vấn đề bảo mật ở đây: (1) Nếu tệp /mnt/example.txtkhông được cho là có thể đọc được trên thế giới, nhưng ô của bạn được đặt ở mức cho phép như 22, thì /tmp/asdf sẽ có thể đọc được trên thế giới. Nếu có người khác trên hệ thống, họ có thể đọc bản sao tạm thời của tệp. (2) Tệp /mnt/example.txtcó thể không được ghi trên thế giới, nhưng, nếu có người độc hại trên hệ thống, họ có thể đọc bản sao tạm thời của tệp và thay thế bằng phiên bản sửa đổi trước khi bạn di chuyển / sao chép nó trở lại đúng vị trí   Tiết (Cont'd)
G-Man nói 'Phục hồi Monica'

3
(Tiếp theo), (Đặt bit dính vào /tmpcó thể ngăn chặn điều này.) (3) Lệnh mv /tmp/asdf /mnt/example.txtsẽ phá hủy hoàn toàn dòng điện /mnt/example.txtvà thay thế nó bằng /tmp/asdf. Bạn muốn thay thế nội dung của /mnt/example.txtvới nội dung của /tmp/asdf. Bằng cách sử dụng mv, bạn thiết lập /mnt/example.txtđể có các thuộc tính giống như /tmp/asdf- có thể thuộc sở hữu của bạn và có thể đọc được trên thế giới. Nó có thể tốt hơn cp /tmp/asdf /mnt/example.txthoặc thậm chí cat /tmp/asdf > /mnt/example.txt. Tiết kiệm PS (4) Bạn có thể tạm dừng vibằng cách gõ :suspend(hoặc :susviết tắt là).
G-Man nói 'Phục hồi Monica'

@ G-Man Đó là một số điểm tốt. Tôi không đặc biệt sợ ai đó ăn cắp một tập tin trong 5 phút /tmp, nhưng không có lý do gì để không viết thư ~/thay thế. Tôi cũng đã không nghĩ rằng nó sẽ thay thế các thuộc tính. Tôi sẽ chỉnh sửa bài viết của mình, cảm ơn :)
Luc

3

Không có lợi ích. visẽ tạo một tập tin nếu không tồn tại.


1

vi là một trình soạn thảo văn bản trực quan (vi = visual) Dù sao nó cũng được so sánh với "ed", nó chỉ cho phép bạn xem và thay đổi một dòng văn bản một lúc.

Các touchlệnh cập nhật các dấu thời gian trên một tập tin hiện có, hoặc tạo ra một tập tin mới nếu tập tin không tồn tại. Nó tốt cho việc kiểm tra những thứ phụ thuộc nhiều vào dấu thời gian.

Bây giờ nếu tệp của bạn là tệp văn bản hoặc chưa tồn tại, hãy mở tệp đó bằng vi, sau đó ban hành lệnh :wqcho vi, sẽ có kết quả tương tự như chạm vào tệp đó. Đó là cách duy nhất hai lệnh tương tự nhau.


1

Cụ thể để sử dụng với vi, không cần phải tạo tệp trước khi bạn chỉnh sửa tệp: vicó thể được sử dụng để tạo và lưu tệp mới. Tuy nhiên, có các bối cảnh gọi nơi tập tin cần tồn tại. Ví dụ: trên hệ thống của tôi (OS X), tôi có thể khởi chạy trình chỉnh sửa GUI thích hợp (được xác định theo loại tệp) như sau:

open foo.txt

Điều này sẽ mở foo.txttrong TextEdit hoặc trong emacs hoặc bất cứ điều gì tôi đã chỉ định làm trình soạn thảo lựa chọn cho các tệp văn bản và tách quy trình để tôi nhận lại lời nhắc ngay lập tức. ( open bar.pycó thể mở nó trong IDLE, trình soạn thảo python; v.v.) Hoặc tôi có thể yêu cầu rõ ràng emacs:

open -a emacs foo.txt

Nhưng openyêu cầu tập tin tồn tại, nếu không nó sẽ gây ra lỗi. Vì vậy, tôi phải xác định emacslà hàm shell sau, cho phép tôi viết emacs foođể khởi chạy emacsGUI ngay cả khi fookhông tồn tại.

function emacs () 
{ 
    if [ -n "$1" -a ! -e "$1" ]; then
        /usr/bin/touch "$1";
    fi;
    open -a emacs "$@"
}

0

vi được sử dụng để chỉnh sửa một tệp như người dùng, trong khi cảm ứng có thể đặt dấu thời gian trên đó và chủ yếu được sử dụng trong các tập lệnh và như vậy.

Một cách khác để tạo một tập tin là:

>newfile.txt

1
Điều này không đáng tin cậy vì nó không (afaik) được chỉ định trong thông số POSIX. Ví dụ: In zsh, nó giống hệt cat >newfile.txtvà cần bạn nhấn Ctrl + D.
Adam Katz

@AdamKatz điểm tốt; Tôi cập nhật câu trả lời, cảm ơn vì lời khuyên.
James Youngman

0

Theo trang của người đàn ông, công việc chính của anh ta là thay đổi dấu thời gian của tệp.
Ofc cũng đang tạo tệp với dấu thời gian hiện tại và sau đó bạn có thể chỉnh sửa tệp.

VI là trình soạn thảo văn bản thực hiện những gì nó nói chỉnh sửa văn bản mở, lưu, chỉnh sửa tệp, v.v ...

Tất cả là hương vị của người dùng và hợi: chạm vào vi hoặc vi file.txt cùng màu khác nhau.


0

touch lệnh thay đổi ngày và giờ của tệp có dấu thời gian hiện tại.
nếu tệp không tồn tại, nó sẽ tạo tệp mới theo ngày và giờ.

vi Trình chỉnh sửa được sử dụng để chỉnh sửa tệp nếu tệp không tồn tại, nó tạo tệp mới trừ khi chúng tôi không lưu tệp.

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.