Apa perbedaan antara j, CTRL-J, <NL> dan CTRL-N dalam mode normal?


12

Saya melihat suatu tempat di web seseorang menggunakan Ctrl-Jdan karena saya tidak tahu pemetaan ini, saya mencari di dokumen yang relevan dan menemukan yang berikut:

j           or
<Down>      or
CTRL-J      or
<NL>        or
CTRL-N          [count] lines downward linewise.

Yang membawa saya ke beberapa pertanyaan:

  • Apa itu<NL> : Saya akan melihatnya setara dengan <CR>karena menekan Enterakan turun satu baris dalam mode normal secara default tetapi mengapa ada di <NL>sini dan tidak <CR>?
  • Apa perbedaan antara pemetaan ini : Apakah semua opsi 5 turun satu baris dengan cara yang sama? Menurut tes saya, saya akan menjawab ya tapi itu akan mengarah pada pertanyaan saya berikutnya.
  • Mengapa ada 5 pemetaan untuk melakukan hal yang sama persis : Saya dapat memahami itu jdan <down>disimpan untuk pengguna yang tidak terbiasa dengan vim pemetaan, tetapi mengapa pemetaan lain ada?
  • Kapan lebih menarik untuk menggunakan satu lebih dari yang lain : Itu adalah kelanjutan dari pertanyaan sebelumnya: jika ada begitu banyak kemungkinan saya kira mereka memiliki kelebihan yang berbeda atau lebih baik digunakan dalam kasus penggunaan tertentu. Apa itu kasus penggunaan?

Saya menemukan redundansi perintah ini bahkan lebih aneh ketika saya melihat :h k: hanya ada 3 cara untuk naik: k, <UP>dan ctrl-p. Jadi pertanyaan bonusnya adalah: Mengapa ada 5 cara untuk turun dan hanya 3 yang naik?


Apakah Anda yakin mereka menggunakan Ctrl-Jpengikatan default ? Tampaknya umum, setidaknya di antara yang saya tahu, untuk memetakan Ctrl-J/K"turun / naik sampai baris berikutnya dengan tingkat indentasi yang sama dengan garis awal".
Aaron Dufour

4
Saya ingin menjawab, "Mengapa ada 5 cara untuk turun dan hanya 3 yang naik?" Yah - itu karena, dalam kehidupan, segalanya berjalan jauh lebih mudah ke selatan ! :)
VanLaser

@ VanLaser jawaban yang sangat bagus, mereka harus mempertimbangkan untuk menambahkan petunjuk ini di dokumen! ;-)
statox

@ VanLaser Sayang sekali, bukan. Pada tingkat itu semua umat manusia akan turun ke kehampaan dalam waktu singkat!
xji

"Tinggalkan harapan, semua yang ada di <CR>sini"
VanLaser

Jawaban:


15

Menarik yang Anda sebutkan <CR>. <CR>atau carriage return, secara teknis digunakan berarti pergi ke awal baris . <NL>, atau baris baru alias umpan baris (biasanya disebut LF), digunakan untuk pergi ke baris berikutnya . Seiring waktu, perbedaan hilang di sebagian besar aplikasi. 1 Menekan Entersebenarnya menghasilkan carriage return, biasanya (coba tekan CtrlVEnter- Anda akan melihat ^Mdi terminal Unix). <NL>Kode kontrol adalah CtrlJ.

CtrlNmengejutkan saya. Menurut 2 , itu adalah karakter pergeseran :man ascii

Oct   Dec   Hex   Char                        Oct   Dec   Hex   Char
────────────────────────────────────────────────────────────────────────
016   14    0E    SO  (shift out)             116   78    4E    N

The pergeseran dan pergeseran keluar karakter, menurut Wikipedia :

... menyediakan cara untuk menggeser, karenanya nomenklatur, pita berwarna, terbagi secara longitudinal dengan merah dan hitam, naik turun ke warna lainnya dalam mesin tik elektro-mekanis atau teleprinter ...

Bagaimana akhirnya makna itu turun adalah misteri bagi saya.


Mengapa ada 5 cara untuk turun dan hanya 3 yang naik?

Nah, tiga cara untuk naik semua memiliki cara yang sesuai untuk turun. ( CtrlPmungkin merupakan pelengkap dari CtrlN, menyiratkan bahwa pergeseran masuk / keluar tidak relevan di sini). Dua cara tambahan ( <NL>atau CtrlJ) sebenarnya adalah dua representasi dengan cara yang sama. <NL>adalah warisan dari zaman mesin tik - dan pada masa itu, saya tidak berpikir ada kunci untuk naik - hanya untuk turun.

Lihat juga:

1 Masih ada masalah dalam beberapa kasus (pencetakan \r(carriage return) dan \n(pengumpanan baris) menggunakan sebagian besar fungsi / alat cetak yang diformat masih mempertahankan makna lama.).

2 Tabel ini disusun sedemikian rupa sehingga alfabet sesuai dengan kode kontrol karakter pada baris yang sama.


3
Saya selalu berpikir Ctrl-Nuntuk selanjutnya , dan Ctrl-Puntuk sebelumnya . Itulah yang mereka perjuangkan di Emacs, di mana mereka terikat next-linedan previous-line. Juga, Ctrl-Ptidak bergeser ; itu adalah pelarian tautan data . Pergeseran masuk adalah Ctrl-O.
Lithis

@Lithis saya berdiri dikoreksi.
muru

2
@Lithis Jujur saja, satu-satunya yang saya tahu tentang Emacs adalah cx ce.
muru

Jawaban historis dan jelas, terima kasih banyak Muru! Seharusnya aku memikirkan kode ascii karakter yang jawabannya sering ada di sana.
statox

@muru Itu terlalu buruk karena Emacs sebenarnya memiliki banyak hal untuk ditawarkan, terutama mode-org yang telah sangat membantu saya. Saya sarankan Anda memeriksa proyek Spacemacs github.com/syl20bnr/spacemacs , yang sangat berfokus pada emulasi Vim sehingga Anda tidak perlu tahu perintah Emacs tradisional untuk digunakan. Mungkin itu akan sedikit mengubah persepsi Anda.
xji

8

Lihat :help key-notation.

  1. <NL>berarti "linefeed" dan <CR>berarti "carriage return".

    Itu adalah dua cara berbeda untuk memutus garis saat ini. Mereka secara historis terikat dengan karakter kontrol yang berbeda ( ctrl-jdan ctrl-m) tetapi biasanya disisipkan dengan kunci yang sama <CR>,. Saya setuju bahwa menggunakan <NL>dalam konteks ini tampaknya berlawanan dengan intuisi.

  2. Semua "pemetaan" (mereka sebenarnya bukan pemetaan) berperilaku dengan cara yang persis sama.

  3. Sejarah, sebagian besar, juga kendala lintas platform.

    Tidak ada tombol gerak khusus terminal Bill Joy tetapi decals panah ada di hjkltombol. Karena editor modal jarang pada saat itu, menekan tombol-tombol itu hanya menyisipkan karakter terkait dalam apa pun yang Anda lakukan. Anda harus menekan <C-h>, <C-j>, <C-k>dan <C-l>untuk memindahkan kursor di layar.

    Seperti yang Anda lihat, ada cukup tumpang tindih merupakan antara j, <C-j>, <NL>dan <Down>. <C-n>umumnya berarti "selanjutnya" di Vim, mudah untuk melihat bagaimana ia disatukan dengan kawan-kawannya.

  4. Karena semuanya sama, Anda bebas menggunakan yang paling cocok untuk Anda.

    <CR>, misalnya, adalah kunci yang menarik untuk digunakan untuk pemetaan Anda sendiri.


Terima kasih atas pencerahannya! Saya sangat setuju dengan <CR>pemetaan. Juga satu pertanyaan lagi: Saya tahu bahwa "kombinasi tombol" itu sebenarnya tidak disebut pemetaan tetapi saya tidak yakin bagaimana saya harus memanggil mereka?
statox

Itu pertanyaan yang menarik, saya cenderung menyebutnya "perintah".
romainl

Saya mungkin salah, tapi tidak "perintah" mengacu pada mantan perintah modus seperti :ls, :substitute, new, dll ...?
statox

xjuga merupakan "perintah".
romainl

Memang saya hanya melihat bahwa panggilan doc x, dd, c, dll "perintah". Jadi Anda pasti benar, saya kira itu jatau ^Jjuga perintah.
statox
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.