Dalam Sublime Text 2, bagaimana saya bisa masuk ke kolom lurus dengan beberapa kursor pada tepi yang acak-acakan?

33

Misalkan saya punya beberapa kursor sepanjang beberapa baris, seperti ini:

foo|
barr|
foobar|
baz|

Bagaimana saya bisa secara otomatis mendorong spasi putih di akhir setiap baris ke tepi datar, seperti ini ?:

foo    |
barr   |
foobar |
baz    |

(Dalam contoh ini, |seharusnya menjadi kursor saya.)

Ketika Anda baru saja Tabatau Spacedari pengaturan awal, Anda mendapatkan ini:

foo    |
barr    |
foobar    |
baz    |

Itu berguna, tetapi bukan yang saya cari. Saya mencari beberapa jenis pintasan keyboard yang akan membuat saya lekuk dari insert multi-kursor yang kasar ke kolom lurus.

Gladstone. Terus
sumber
Apakah sekadar menyisipkan satu atau dua tab berfungsi?
Darth Android
Tidak, tapi saya mungkin gagal untuk mengerti. Saya telah mengedit untuk mengklarifikasi pertanyaan saya.
GladstoneKeep
Suntingan Anda menjelaskan apa yang dilakukan Space, dan sampai batas tertentu Tab akan melakukannya jika garis Anda bervariasi dalam jumlah besar, tetapi jika semuanya cukup dekat maka setelah dua tab kursor Anda semua harus berada pada tabstop. Anda mungkin harus melakukan sedikit penyesuaian untuk mendapatkan semuanya pada tabstop yang sama, tetapi itu akan kurang dari mencoba menyesuaikan dengan spasi.
Darth Android
Itu aneh. Menekan Tabpada akhir setiap baris membuat indentasi multi-kursor yang kasar ke kolom lurus, tetapi tidak mungkin untuk mencapai efek yang sama menggunakan regex. Saya mencari spasi tambahan: \s*$dan menggantinya dengan karakter tab: \t- tetapi \ttidak mencapai efek yang sama dengan menekan Tabsecara manual.
amiregelz
1
FYI, saya memposting ini sebagai permintaan fitur pada papan permintaan Sublime Text 2.
GladstoneKeep

Jawaban:

10

Anda bisa menggunakan Alignment Sublime wbond

Ini mungkin mengharuskan Anda untuk menambahkan ini ke file pengaturan Anda (Preferensi> Pengaturan Paket> Alignment> Pengaturan-Pengguna:

// The mid-line characters to align in a multi-line selection, changing
// this to an empty array will disable mid-line alignment
"alignment_chars": ["=", "|"],
// If the following character is matched for alignment, insert a space
// before it in the final alignment
"alignment_space_chars": ["=", "|"]

Ganti "|" dengan karakter apa pun yang ingin Anda selaraskan.

Sunting: Seperti mtoast telah menemukan, menambahkan "\n"ke "alignment_chars" memberikan efek yang diinginkan. Menambahkan karakter baris baru ke "alignment_space_chars" mungkin tidak diperlukan dan dapat menghapus teks. Namun, dengan tes terbatas saya, saya tidak melihat perbedaan.

Tahan controldan klik di akhir setiap baris. Kemudian tekan hotkey pelurusan (Untuk linux defaultnya adalah ctrl+ alt+ a). Anda akan menemukan bahwa kursor berbaris dengan posisi kursor terjauh.

Sunting2: Menambahkan baris baru ke "alignment_space_chars"akan menghapus teks jika Anda menyorot blok teks dan Sublime Alignment tidak dapat menemukan hal lain untuk disejajarkan di baris (seperti tanda sama dengan).

Juga, jika Sublime Alignment tidak dapat menemukan hal lain untuk disejajarkan, menambahkan baris baru "alignment_chars"akan melapisi ujung garis dengan spasi (atau tab tergantung pada pengaturan Anda) untuk mencocokkan garis terpanjang yang disorot.

d_rail
sumber
1
Wow hebat! Saya menginstal paket Alignment Luhur, menambahkan "\n"(baris baru) ke saya "alignment_chars", dan mendapatkan hasil yang diinginkan. (Catatan: Saya tidak menambahkannya "alignment_space_chars", yang menyebabkan baris dihapus.) Jika Anda akan menambahkan saran khusus ( "n") ke jawaban Anda, saya akan menerimanya.
GladstoneKeep
Bagus! Paket yang sangat berguna untuk perfeksionis seperti saya :)
amiregelz
3
Ada juga paket serupa: Align Tabular , yang sedikit lebih fleksibel (Anda dapat menyelaraskan banyak karakter).
d_rail
Dengan AlignTab disebutkan di atas oleh d_rail, ingat untuk melarikan diri |dengan satu `\`
pengguna
Saya tidak percaya ini tidak memiliki satu juta suara.
Charles
44

Anda juga dapat melakukannya tanpa paket eksternal menggunakan peretasan minor, dengan sedikit usaha. Begini caranya:

| mewakili kursor dalam instruksi ini.

  1. Buat kursor pada semua baris yang diinginkan menggunakan Ctrl+ Klik atau dengan memilih blok teks dan menekan Ctrl+ Shift+ L. ( dokumen seleksi )

  2. Tambahkan spasi tambahan di akhir setiap kata, sampai setiap kursor berada pada atau melewati titik di mana Anda ingin kolom Anda (tidak peduli seberapa jauh masa lalu):

    foo     |
    barr     |
    foobar     |
    baz     |
    
  3. ( opsional 1 ) Ketikkan karakter apa saja diikuti spasi; mari kita gunakan c:

    foo     c |
    barr     c |
    foobar     c |
    baz     c |
    
  4. Tekan Homeuntuk membuat kursor melewati awal baris:

    |foo     c
    |barr     c
    |foobar     c
    |baz     c
    
  5. Tekan → (right arrow) hingga kursor berada di tempat Anda menginginkan kolom Anda:

    foo    | c
    barr   |  c
    foobar |    c
    baz    | c
    
  6. Tekan Ctrl+ Shift+ untuk memilih semua spasi putih berikut dan c, lalu tekan Delete:

    foo    |
    barr   |
    foobar |
    baz    |
    
  7. ( opsional 1 ) Tekan Deletelagi untuk membersihkan karakter spasi putih tambahan yang kami tambahkan pada langkah opsional.


1 Kami menggunakan ckarakter yang diikuti oleh spasi hanya jika ada konten tambahan pada baris yang ingin kami pertahankan. Tanpa itu, Ctrl+ Shift+ akan memilih kata pertama dari setiap konten tambahan di baris, membuat penghapusan menjadi rumit.

kogre
sumber
2
Ini terlihat bengkok pada awalnya tetapi ini adalah retas yang rapi. Bagus untuk menempelkan kolom dengan penjajaran yang tepat. Kolom berikutnya dapat ditempel menggunakan plug-in teks pastry.
pengguna
1
Saya telah menggunakan teknik ini untuk sementara waktu tetapi hati-hati , ctrl+shift+righttidak memperlakukan semua karakter secara konsisten sehingga mungkin akhirnya memilih lebih dari sekadar ruang putih.
SpareBytes
1
Trik yang sangat rapi, saya setuju. Tapi saya hanya mencobanya tanpa karakter di akhir, dan digunakan Shift-End Deletedan itu hanya berhasil. Apakah itu berfungsi dalam beberapa kasus tetapi tidak pada yang lain?
Septagram
Inilah yang selalu saya lakukan :)
Domino
Ini tidak berfungsi jika cpada satu baris sebelum akhir kata pada yang lain. Yang merupakan masalah yang saya alami sekarang. Baris tertentu tidak mengandung karakter yang cukup untuk menggulir ke kanan, jadi ketika Anda melakukannya membungkus ke baris berikutnya, meninggalkan peretasan ini sebagai hanya itu. Ini adalah retas, bukan pengganti yang berguna untuk semua.
leetNightshade
0

Bagi mereka yang ingin membuat indentasi pada karakter selain =dan |, saya dapat menginstal paket Alignment dan memodifikasi file Sublime Text > Preferences > Package Settings > Alignment > Settings - Useragar terlihat seperti berikut:

{
  "alignment_chars": [
    "{create",
   ]
}

Saya kemudian memilih kode berikut:

  let!(:admin_user) {create(:admin_user, :admin)}
  let!(:another_admin_user) {create(:admin_user, :admin)}
  let!(:superadmin_user1) {create(:admin_user, :superadmin)}
  let!(:superadmin_user2) {create(:admin_user, :superadmin)}
  let!(:nonadmin_user) {create(:admin_user)}

dan tekan Command + Ctrl + Auntuk menyelaraskannya.

  let!(:admin_user)        {create(:admin_user, :admin)}
  let!(:another_admin_user){create(:admin_user, :admin)}
  let!(:superadmin_user1)  {create(:admin_user, :superadmin)}
  let!(:superadmin_user2)  {create(:admin_user, :superadmin)}
  let!(:nonadmin_user)     {create(:admin_user)}

Semuanya dipindahkan ke kolom paling kiri yang {createdapat ditempati teks tersebut sementara masih disejajarkan.

Matthew Hinea
sumber