Cách dễ nhất để chèn en dash trong Vim là gì?


33

Để chèn một dấu gạch ngang , tôi sử dụng ^v u 2014bảy phím nhấn. Có cách nào dễ hơn không? (Tôi đã xem các bản vẽ và không tìm thấy dấu gạch ngang ở đó.)



7
Nếu bạn đang sử dụng X11, tôi sẽ nói XCompose ... Vì điều này sẽ hoạt động trên tất cả các ứng dụng của bạn chứ không chỉ Vim. Hoặc nếu bạn đang dùng OSX hoặc Windows, các tiện ích mà HĐH đó cung cấp.
Martin Tournoij

Có lẽ không phải là cách dễ nhất , nhưng tôi có xu hướng sử dụng <Ctrl-Shift-U>2013<Space>vì nó hoạt động ở mọi nơi. Một vài mã khóa đi một chặng đường dài (tôi chủ yếu sử dụng U + 2013, U + 2014, U + 2026, U + 2212, U + 2192, U + B0; - / - / / / / / → / °).
wchargein

Vì tò mò, làm thế nào để bạn hiển thị dấu gạch ngang? AFAIK, không có cách nào để hiển thị phông chữ có chiều rộng không cố định một cách chính xác (nghĩa là với độ rộng ký tự và độ sáng không đồng nhất), do đó, dấu gạch ngang luôn trông giống hệt như dấu gạch nối kéo dài đến cạnh cực của ranh giới ký tự. Bạn có phiền khi có sự mất kết nối cực độ giữa cách nhân vật được hiển thị trong Vim và cách nó được hiển thị ở nơi khác không?
Kyle Strand

2
Tôi với @Carpetsmoker: Compose - - -cho một em-dash, Compose - - .cho một en-dash. Compose thật kỳ diệu, đặc biệt nếu bạn ánh xạ nó tới Caps-Lock hoàn toàn không được sử dụng.
Rmano

Câu trả lời:


42

Bạn có thể sử dụng sơ đồ: Ctrl+k-N(có vốn N)

Trong chế độ Chèn, các sơ đồ được nhập Ctrl+ktheo sau bởi một chuỗi hai ký tự. Đối với en-dash, trình tự là -N.

Như Quincy đã chỉ ra, U+2014là em-dash. Nếu bạn muốn nhập dữ liệu đó bằng cách sử dụng sơ đồ, trình tự là -M.


Tương tự, EM DASH có thể được chèn bằng <Ck> -M.
Quincy Bowers

U+2014không phải là en-dash? đời của tôi là một lời nói dối! Chỉnh sửa: bây giờ tôi nhận được nó: phông chữ đầu cuối của tôi (Inconsolata) biểu hiện cả hai dấu gạch ngang theo cùng một cách.
Tomas Tomecek

3
Để đi đến câu trả lời này: hex 2013 là số thập phân 8211. Sử dụng :digraphslệnh để hiển thị tất cả các bản vẽ và tìm 8211.
200_success

10

Nếu không có một sơ đồ được xác định trước hoặc bạn muốn có một chuỗi khóa dễ nhớ hơn, thì bạn có thể xác định các bản đồ trong vimrc của mình. Ví dụ, bên dưới sẽ xác định hai sơ đồ cho en dash (8211) và em dash (8212) phản ánh trình tự XCompose của chúng.

digraph -. 8211 -- 8212

Các :digraphlệnh kỳ vọng giá trị được xác định trong hệ thập phân chứ không phải là hex, đó là lý do tại sao nó là 8211 cho en dash chứ không phải là năm 2013.


Máy đào en dash được xây dựng trong.
200_success

1
@ 200_success Tôi không nói là không phải. :) Các lựa chọn máy in của Vim không phải lúc nào cũng phù hợp với các tiêu chuẩn hơn, do đó, biết cách xác định máy in của riêng bạn là hữu ích, ngay cả khi đã tồn tại.
jamessan

8

Cách tiêu chuẩn để chèn một dấu gạch ngang trong Vim là sử dụng một bản vẽ sơ đồ, như tommcdo đã giải thích .

Tuy nhiên, tôi tìm thấy các bản tóm tắt nói chung, và đặc biệt là bản này ( Ctrl+k,- , Shift+N) khá vụng về để gõ. Để nhập nhanh hơn dấu gạch ngang, bạn có thể thêm cặp ánh xạ chế độ chèn sau vào tệp filetype, chẳng hạn như .vim/after/ftplugin/markdown.vim.

Đối với dấu gạch ngang en / em, tương ứng:

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- —

NB Có <buffer>nghĩa là ánh xạ này sẽ chỉ áp dụng cho các tệp Markdown. Điều này là cần thiết bởi vì có một số bối cảnh (ví dụ như lập trình) trong đó tôi không muốn hai dấu gạch nối được thay thế bằng dấu gạch ngang.

Các ánh xạ này lợi dụng thực tế là trong các bối cảnh tôi thường sử dụng chúng, các dấu gạch ngang được bao quanh bởi các khoảng trắng, còn các dấu gạch ngang thì không . * Do đó, sử dụng các ánh xạ này có nghĩa là tôi có thể sử dụng chính xác cùng một phím bấm trong các trình soạn thảo văn bản có khả năng kém hơn mà đôi khi tôi buộc phải sử dụng và vẫn nhận được đầu ra hợp lý. **

Tôi thực sự sử dụng một giải pháp phức tạp hơn một chút so với ở trên, bởi vì, vì lý do chính tả, tôi thích bao quanh các dấu gạch ngang của mình với các khoảng trống tóc . Có những thứ này trong Markdown giúp nó dễ đọc hơn, nhưng may mắn thay, Vim có một giải pháp cho việc này, với chức năng "che giấu", cho phép bạn ẩn các mục cú pháp nhất định khi con trỏ ở một dòng khác: ***

inoremap <buffer> --<space> –<space>
inoremap <buffer> -- &#8202;—&#8202;

syntax match entity_hairspace "&#8202;" conceal
setl conceallevel=2

* Nếu tôi cần sử dụng một dấu gạch ngang không dấu, thì tôi có thể chỉ cần nhấn phím lùi sau khi nhập ánh xạ.
** Nếu bạn thường không sử dụng dấu gạch ngang như thế này hoặc nếu bạn chưa từng mạo hiểm với Vim, bạn có thể sử dụng một cái gì đó khác để kích hoạt ánh xạ: vd --.---. Nếu bạn sử dụng các kích hoạt khác, bạn cũng có thể đặt nó trực tiếp vào .vimrc của bạn và xóa các <buffer>tùy chọn.
*** Bạn cũng có thể sử dụng một ký tự che giấu ccharđể thay thế các mục cú pháp bằng một ký tự duy nhất, thay vì ẩn chúng hoàn toàn. Nếu bạn lo lắng về vấn đề mã hóa, bạn có thể sử dụng điều này để khiến Vim hiển thị &ndash;các thực thể HTML trong tệp dưới dạng dấu gạch ngang.


Vì vậy, bạn sử dụng dấu gạch ngang trong Vim? Trông chúng có vẻ kỳ quặc không, vì chúng chỉ được cho một chiều rộng cột? Bạn có biết bất kỳ thủ thuật nào để làm cho dấu gạch ngang thực sự chiếm một khoảng không gian tốt, có lẽ là giá trị của hai cột không?
Kyle Strand

@KyleStrand Bạn muốn lấy hacky như thế nào? Hãy thử điều này: set conceallevel=1 | syntax match longdash '—' conceal cchar=-(Lưu ý rằng dấu gạch ngang đầu tiên trong lệnh này là dấu gạch ngang và dấu gạch ngang thứ hai là dấu gạch ngang toàn phần.)
Giàu

Tôi không thấy sự khác biệt trong màn hình hoặc xem tại sao điều đó sẽ khiến màn hình chiếm hai cột. Có phải bạn đã vô tình hiểu nhầm câu hỏi của tôi, hoặc có khả năng tôi đang hiểu nhầm đề xuất của bạn?
Kyle Strand

.... thực sự, tôi không biết gì về đặc tả cú pháp Vim. Liệu syntax matchlệnh thậm chí hoạt động bên ngoài ngữ cảnh của một tệp cú pháp?
Kyle Strand

@KyleStrand Tôi hiểu câu hỏi của bạn. Bạn đã thử sao chép dòng đó vào vimrc của bạn chưa? Hay chỉ chạy nó trong Vim? :)
Giàu

3

Trên bàn phím Mac AZERTY Pháp của tôi, tôi có thể chèn một dấu gạch ngang với Alt+ -. Số dặm của bạn rõ ràng có thể thay đổi.


2
Alt+-(hay đúng hơn Option+-là mang tính mô phạm) là một phím tắt dành riêng cho máy Mac. Nó hoạt động ở mọi nơi trong OS X, nhưng không liên quan đến vi hoặc vim.
tro 108

1
Hoạt động trong MacVim, nhưng trong Terminal vim, nó hoạt động như [Esc] theo sau -, do đó chuyển sang chế độ Bình thường và đặt con trỏ ở đầu dòng trước.
200_success

3

Cài đặt plugin unicode của tôi , nhập Vim và nhập DASH theo sau CtrlXCtrlZđể kích hoạt hoàn thành unicode.

nhập mô tả hình ảnh ở đây

(Lưu ý -N trong phần mô tả hiển thị sơ đồ để nhập ký tự đó)


0

Lấy cảm hứng từ câu trả lời tuyệt vời của Rich Tôi đã thêm các dòng sau vào vimrc của mình:

" For en/em dashes, respectively
autocmd FileType markdown imap -- –
autocmd FileType markdown imap --- —

Hoạt động như một điều trị!


0

Đối với một en dash, một sơ đồ là cách tốt nhất để đi, như được đề xuất trong các câu trả lời khác nhau. Nhưng đối với các ký tự unicode tùy ý, một cách khác là sử dụng ^Vtrong chế độ chèn (xem :he i_CTRL-V_digit).

Đối với một dấu gạch ngang đó là ví dụ ^Vu2013.


Bây giờ tôi nhận ra rằng đây thực sự là những gì OP đã làm! (Mặc dù en dash là 2013, không phải 2014 - đó là em dash.) Tuy nhiên, tôi nghĩ rằng điều này vẫn có thể tốt để có một nơi nào đó trong đống câu trả lời.
run rẩy
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.