Xóa 100 dòng khỏi trình soạn thảo vi bằng lệnh đơn


33

Tôi đang sử dụng Ubuntu và cố gắng xóa tất cả 100 dòng khỏi vitrình soạn thảo nhưng tôi nhận được câu hỏi phỏng vấn về việc này trong một lệnh.


Không phải là giải pháp VI, nhưng từ dòng lệnh: echo -n > <file>xóa tất cả các dòng khỏi tệp (thực tế chỉ ghi đè tệp bằng "").
azz

3
@Der Không cần sử dụng echochút nào cho việc đó; > $filehoạt động tốt
một CVn

4
Đó là loại công ty gì, đặt câu hỏi về vimột cuộc phỏng vấn?
một CVn

2
Câu hỏi này dễ dàng được trả lời với một kiến ​​thức thô sơ về vi. Trên máy tính có cài đặt vim (trên Ubuntu tôi muốn giới thiệu vim-gtkgói, vì điều đó cho phép bạn truy cập vào xclipboard trong vim), nhập vimtutorvào dòng lệnh (không phải trong vim) để có hướng dẫn tương tác về những điều cơ bản. Sẽ không mất hơn nửa giờ và đó là hướng dẫn tốt nhất để sử dụng vi / vim mà bạn có thể tìm thấy.
evilsoup

1
@ MichaelKjorling Tôi có thể tưởng tượng nó sẽ xuất hiện trong một cuộc phỏng vấn nếu người nộp đơn đã đề cập đến kinh nghiệm trước đó với vi(bằng lời nói hoặc bằng cách tiếp tục) hoặc nếu câu hỏi được đặt trước, "Được rồi, là một sysadmin, bạn phải biết điều gì đó về các biên tập viên dòng lệnh, phải ? Bạn đã sử dụng vi? "
tự đại diện

Câu trả lời:


62

Ở chế độ bình thường, làm

100dd

ddxóa dòng hiện tại. Đặt trước lệnh đó với 100nguyên nhân lặp lại 100 lần.

Nếu có ít hơn 100 dòng trong tệp bắt đầu từ dòng hiện tại, tùy thuộc vào việc vitriển khai, nó sẽ không thể xóa bất kỳ hoặc xóa nhiều như có. Trong trường hợp vim, điều đó phụ thuộc vào việc tùy chọn cpaka compatiblecó bật hay không.


sai anwser nó chỉ xóa dòng hiện tại
mayur Mehta

Tôi muốn xóa 100 dòng bằng một lệnh một lần
mayur Mehta

13
100ddlà câu trả lời đúng Tôi tự hỏi những gì bạn đang làm.
ott--

1
@mayurMehta không biết công ty nào đang đặt câu hỏi như thế này và không biết câu trả lời của họ là gì. Nhưng bất kỳ người dùng VI mới làm quen nào cũng sẽ biết rằng 100dd là câu trả lời đúng.
Munim

1
@vgoff Tôi không biết .. Nếu họ không tìm kiếm một giải pháp chung để kiểm tra các kỹ năng vim cơ bản của bạn, thì đó chỉ là một câu hỏi mẹo đối với những người được phỏng vấn. Tôi muốn nói 100dd là câu trả lời. Nếu người phỏng vấn hỏi "Điều gì xảy ra nếu tệp có ít hơn 100 dòng từ con trỏ hiện tại?", Tôi sẽ trả lời: "Lệnh sẽ xóa những gì có thể từ con trỏ hiện tại." Điều đó là hoàn toàn hợp lý. Trừ khi người phỏng vấn làm rõ, tại sao con trỏ sẽ không ở dòng đầu tiên? Tôi ghét những câu hỏi lừa như thế này.
Munim

44
  1. xóa 100 dòng chuyển tiếp từ (bao gồm) dòng hiện tại

    • lặp lại dd (xóa dòng hiện tại) 100 lần:

      100dd
      
    • xóa từ dòng hiện tại đến 99 dòng chuyển tiếp

      d99j
      
  2. xóa 100 dòng ngược từ (bao gồm) dòng hiện tại

    d99k
    
  3. xóa các dòng trong một phạm vi cụ thể theo số dòng

    :1,100d
    
  4. xóa các dòng trong một phạm vi bắt đầu với dòng hiện tại

    :.,.+99d
    

Vân vân.


2
số 4 sẽ xóa dòng hiện tại (0) cho đến dòng thứ 101 (0 + 100), do đó 101 dòng thay vì 100 được hỏi. Hãy thử:.,+99d
Olivier Dulac

Drat, và tôi đã có những chuyển động chính xác! Cảm ơn.
Vô dụng

100dd cũng không hoạt động với tôi - nhưng # 4 ở trên hoạt động tốt với tôi trong VI dưới Solaris 10.
DemiSheep

8

Nếu tất cả các dòng trong tệp sẽ bị xóa, lệnh vi này chỉ định phạm vi xóa:

:1,$d

1biểu thị dòng đầu tiên và $biểu thị dòng cuối cùng


hoặc :%d (trong ":" bối cảnh, ":% ..." là lối tắt cho ": 1, $ ...")
Olivier Dulac

cũng hay: d Gphím & rarr; giết tất cả nội dung từ thực tế [ví dụ: dòng trên cùng] đến dòng dưới cùng
erch

3

Bạn muốn xóa tất cả các dòng trong một tập tin? Mở tệp với vi. Trong khi ở đầu dòng đầu tiên - vị trí mặc định của con trỏ khi bạn vừa mở tệp - nhấn Esctheo sau dG.

Chỉ cần lưu ý, hành động dcho biết xóa và Gchỉ ra dòng cuối cùng của tệp. Vì vậy, trong khi tại bất kỳ dòng nào bạn nhấn dG, nó sẽ xóa tất cả các dòng bắt đầu từ dòng hiện tại cho đến dòng cuối cùng.

Nếu bạn biết những dòng liên tiếp cần xóa - giả sử, từ dòng 101 đến 200 - hãy nhập các chuỗi khóa sau : Esc:101,200d.


Không cần nhấn thoát nếu bạn vừa mở tệp và đang ở đầu tệp. Bạn sẽ tự động (theo mặc định) trong chế độ bình thường.
vgoff

3

Bất kể bạn đang ở đâu trong tập tin, bạn có thể làm ggdG

:%dsẽ làm tốt hơn trong ít nhấn phím. Vâng, đếm các phím shiftenter, thực sự là hai lần nhấn phím nhiều hơn ở trên.

Làm một cái gì đó như thế 100ddsẽ chỉ xóa tối đa 100 dòng từ vị trí của bạn và điều đó có thể không xóa tất cả các dòng khỏi tệp, tùy thuộc vào vị trí dòng hiện tại của bạn.


0

Esc n dd. n là số dòng cần xóa và bao gồm cả dòng hiện tại. Nhấn nút "Esc", sau đó "n" và sau đó "dd". Để hiểu rõ hơn


Nhu cầu thoát hiểm ở đây là gì
Prvt_Yadav

Câu trả lời này giống hệt với câu trả lời được chấp nhận.
Kusalananda

Escape chỉ trong trường hợp bạn đang ở chế độ chèn.
Rida Abid
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.