[Neovim] ยกเครื่องนักไต่ปี 2017


       วันก่อนตอนประชุมพยายามจะใช้ vim ไต่โค้ดหาของ แต่รู้สึกขัดๆ จนอยากจะเปิด PyCharm ที่ใช้เป็นปกติขึ้นมาเปิดแทน แต่ก็ขี้เกียจรอเลยได้แต่ทนไต่ๆ ผ่าน NERDTree ไปจนรู้สึกขัดใจว่า เห้ยนี่อุตส่าห์แต่งมาแทบตาย แต่ลืมวิธีใช้ไปหมด แล้วมันจะมีประโยชน์อะไร สองสามวันที่ผ่านมาเลยนั่งๆ ไล่ดูเครื่องมือนักไต่ที่ใส่ไว้ แล้วก็อัพเดทอะไรนิดหน่อย สรุปว่าเร็วกว่าเปิด PyCharm อีก

นักไต่ตัวที่หนึ่ง CtrlP


       ผมใช้ CtrlP มานานจนจำไม่ได้แล้ว แล้วก็ใช้มันทั้งยังนั้นโดยที่ยังไม่ได้ทำอะไรเพิ่ม ทีนี้เนี่ย ผมเริ่มสังเกตุมาซักปีกว่าละ (อดทนชิปหาย) ว่ามันใช้เวลา load file ตอนแรกนานอึดใจนึงเลย ถ้าเป็นโปรเจ็คใหญ่ๆ หลายพันไฟล์ search ไปมา คนก็ไล่ไปใช้ fzf บ้างแต่ใจมันก็ยังอยู่กับ CtrlP เลยไปเจอ blog บอกว่าแทนที่จะถามว่า เราจะทำยังไงให้มันโหลดเร็วขึ้น ให้ถามว่าเราจำเป็นต้องโหลดทุกไฟล์มั้ย เห้ยแค่ให้มัน ignore ไฟล์ที่อยู่ใน .gitignore ก็ทำให้โหลดเร็วขึ้นสัสๆ ละ ตามไปดูต้นทางใน repo ที่ maintain ตัว CtrlP อยู่ก็มีแนะนำอยู่ท้ายๆ พอใส่ปั๊ป เร็วสัส ไม่อยากไปไหนเลย วิธีทำก็เพิ่มบรรทัดข้างล่างใน vimrc เลยครับมันจะ ignore ให้อย่างที่บอก
let g:ctrlp_user_command = ['.git/', 'git --git-dir=%s/.git ls-files -oc --exclude-standard']

เร็วแค่ไหนถามใจเธอดู อันนี้ blog ต้นทาง https://medium.com/a-tiny-piece-of-vim/making-ctrlp-vim-load-100x-faster-7a722fae7df6

นักไต่ตัวที่สอง ack.vim


       มี fuzzy file search ก็ดี แต่มี text search แบบกด ctrl + shift + f ได้เหมือน IDE หรือ Editor ยุคใหม่ๆ ตัวอื่นมันก็น่าจะดีนะ ความพยายามแรกของอันนี้ผมเลยไปเจอ ack ก่อนซึ่งมันก็ดีนะ ดีกว่า grep แต่พอไปคุยกับพี่อีกคนก็แนะนำ ag (silver searcher) มา พอเปลี่ยนมาใช้เท่านั้นแหละ เร็วสัสอย่างเห็นได้ชัดเลย จริงๆ การจะใช้ search พวกนี้จะใช้ผ่าน command line ตรงๆ ก็ได้ แต่ผมก็ใช้ vim โนะ ก็เลยเอามา integrate กันดีกว่า ผ่าน ack.vim ตัวนี้จะเป็น interface ครอบ ack หรือ ag ให้เราใช้งานใน vim ได้สะดวกมากขึ้น
       จากใน gif ผมแมพคีย์ <leader> + q ไว้ใน normal mode เวลาจะ search ก็เอา cursor ไปวางหน้าคำที่ต้องการจะ search แล้วกด <leader> + q มันก็จะเด้งหน้า quickfix โชว์ผลลัพธ์ให้ พอขึ้นผลลัพธ์มันก็จะมีวิธีเปิดได้หลายๆ แบบ แต่ที่บ่อยสุดก็น่าจะกด O คือเปิดทับไฟล์ปัจจุบันที่เปิดอยู่เลย

นักไต่ตัวที่สาม Easymotion


       ตัวนี้ผมก็ลงมานานพอๆ กับ CtrlP แต่แทบไม่ได้ใช้เลย สาเหตุหลักคือลืมคีย์ที่ตัวเองแมพไว้ วันนี้ก็มาลองนั่งทวนๆ แล้วแว็บไปดูใน repo หน่อยว่ามีอัพเดทไหม กลายเป็นผมใช้ Easymotion แบบโบราณมากเดี๋ยวนี้มีอะไรให้เล่นเพิ่มขึ้นเยอะมาก
       ท่าปกติที่ใช้เวลากด easymotion คือ การไต่ไปที่ตัวอักษรตัวใดตัวหนึ่ง โดยกด <leader> + s หรืออะไรก็ตามที่แมพไว้ มันก็จะทนที่ตัวอักษรที่ match ด้วยตัวอักษรอื่นที่ถ้าเรากดแล้วมันก็จะกระโดด cursor เราไปตำแหน่งนั้น แต่การมานั่งดูอัพเดทวันนี้ทำให้ผมเจอท่าใหม่สองท่าครับ
       ท่าแรกคือ บางครั้งเราจะ search ผ่าน vim ปกติโดยใช้ / ซึ่งพอ search เจอก็จะกด n กันรัวๆ แต่ตั้งแต่ version 2.0 ตัว easymotion สามารถ integrate กับ default search ได้ด้วย ทำให้พอเรา search แบบปกติแทนที่จะกด n รัวๆ ไปจุดที่ต้องการ มันจะแทน match ที่เจอด้วยตัวอักษรที่เรากดแล้วโดดไปหาได้เลย สะดวกดีมาก อีกท่าอธิบายได้ง่ายมาก มันโดดข้าม window ได้แล้วครับ โดยกด <leader> + f ถ้าแมพตามที่มันแนะนำนะ

นักไต่ตัวอื่นๆ

       ถ้าไต่แล้วจะไม่พูดถึง NERDTree ก็ไม่ได้ แต่ผมค้นพบว่าที่ flow ผมไม่ได้ใช้อิสามตัวบนเท่าที่ควรจะเป็นเพราะผมไปตั้งให้มันเปิด NERDTree อัตโนมัติทุกครั้งที่เปิด vim เลยแทนที่จะไปใช้ความสามารถของตัวอื่น กลับมานั่งไต่ๆ ใน NERDTree แทน แต่ก็ไม่ใช่ว่า NERDTree ไม่มีประโยชน์เลย มันยังมีประโยชน์อยู่ครับเวลาผมไม่รู้ชื่อไฟล์ แต่พอจะรู้คร่าวๆ ว่ามันอยู่ตรงไหน
       อีกตัวที่อยากพูดถึงคือ fpp (PathPicker) ครับ เป็น tool ของ facebook ที่สร้างมาให้ developer ใช้ จริงๆ คำอธิบายง่ายๆ คือมันเป็นตัวทำให้เราเปิด vim จาก result ใน terminal อื่นๆ ได้เร็วมากๆ เช่น git grep, ag หรือ โปรแกรมอะไรที่มันมี path ออกมาจาก output พูดแล้วไม่เห็นภาพดูคลิปดีกว่า


       หมดแล้วครับวันนี้ จริงๆ ในตัว vim เองก็มีท่าไต่เยอะมาก แต่มี plugin มันก็สนุกไปอีกแบบ แต่สุดท้าย ถ้ามีเครื่องมือแต่ไม่ได้ฝึก มันก็ไม่ต่างอะไรกับดาบที่ไม่ได้ลับ ใช้บ่อยๆ ก็จะคล่องเอง ขอให้สนุกกับการไต่ครับ     

Comments