سلام دوستان.
چند وقت پیش به این فکر افتادم که یه سری سکرین کست واسه ایمکس درست کنم. برای اینکه بتونم دیگران رو با ایمکس آشنا کنم و علاقه شخصیم رو با دیگران به اشتراک بذارم. این اولین قسمت از این سری سکرین کست ها هست:
سلام دوستان.
چند وقت پیش به این فکر افتادم که یه سری سکرین کست واسه ایمکس درست کنم. برای اینکه بتونم دیگران رو با ایمکس آشنا کنم و علاقه شخصیم رو با دیگران به اشتراک بذارم. این اولین قسمت از این سری سکرین کست ها هست:
قسمت دوم:
قسمت سوم:
قسمت چهارم:
سلام
خیلی ممنون عالیه، منتظر قسمت 5 هستم.
برای خودم دارم یه ادیتور میسازم، مثل شما بدون دستکاری Emacs و فایل init.el
خودمو موقع اجرا میدم به Emacs .
مشکلی که وجود داره اینه که بعضی از پکیج ها خودشون میرن توی فایل های Emacs توی پوشه .emacs.d
و فایل .emacs
مینویسن !!
به نظر سخت میاد که یکی یکی داکیومنت این پکیج هارو بخونم و مسیر تنظیمات هر کدوم رو جدا جدا تغییر بدم، راه ساده تری هست؟
این محتویات فایل .emacs
هستش:
;; Added by Package.el. This must come before configurations of
;; installed packages. Don't delete this line. If you don't want it,
;; just comment it out by adding a semicolon to the start of the line.
;; You may delete these explanatory comments.
(package-initialize)
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(package-selected-packages
(quote
(jedi markdown-mode helm windresize ace-window expand-region flycheck multiple-cursors rainbow-delimiters dracula-theme parinfer paredit))))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
و Jedi
هم توی .emacs.d
یه سری فایل ایجاد میکنه که بعد از دستور jedi:install-sever
که برای اولین بار بعد از نصب Jedi
باید اجرا بشه، ایجاد میشه.
راه سادش اینه که ایمکس رو با این پارامتر ها اجرا کنی:
emacs --no-site-file --no-site-lisp --no-splash -l your_init_file.el
و مسیر پکیج ها رو هم توی یه دایرکتوری دیگه ست کنی ( تو قسمت ۴ توضیح دادم ).
اما در آخر یه سری چیزا توی فایل های پیشفرض قرار می گیرن که زیاد مهم نیستن و یا با تغییر مسیر واسه هر کدوم میتونی درستش کنی.
در ضمن خیلی پیشنهاد می کنم برای پایتون به جای jedi از lsp-python استفاده کنی
سلام
من fg42 رو هم روی سیستمم دارم و فایل اجراییش رو همون اول نگاه کردم و دقیقا همینجوری که میگید اجرا میکنم.
مسیر package هارو هم تغییر دادم دقیقا همونجوری که گفتید.
اما هنوز بعضی پکیج ها خودشون فایل اضافه ایجاد میکنن که میره توی .emacs.d
توی fg42 این چند تا پکیج چه کاری رو انجام میدن؟ توی github توضیحاتش رو خوندم خیلی متوجه نشدم.
تازه متوجه منظورت شدم. خوب این متاسفانه برمی گرده به کد اون کتابخونه ها و اینکه نویسنده یه سری مسیر رو هاردکد کرده. بعضیاش رو با تغییر یه متغیر یا تعریف مجدد یه فانکشن می شه درست کرد
بسیار کار پسندیده ای کردی. ممنونم.
کاملا منطقی هست. و راه حلش ساده. من می گم چجوریه و بد نیست خودت بنویسیش به عنوان تمرین و pull request بدی.
ساده ترین راه اینه که قبل از init کردن پکیج منیجر چک کنی ببینی دایرکتوری packages جایی که باید باشه هست یا نه. اگر بود که هیچی اگر نبود package-refresh-content رو صدا بزنی. و بعد ادامه init.
خیلی ممنون، حتما تا فردا سعی میکنم یکمی بیشتر در مورد elisp
بخونم و انجامش بدم.
من الآن lsp-mode رو نصب کردم که مثل این که برای همه زبوناست نه فقط پایتون فقط برای هر زبونی که بخوای استفاده کنی باید package اش رو نصب کنی که من مال پایتون رو با pip نصب کردم.
الآن توی minibuffer برام توضیح کوتاه توابعی که روش هستم رو نشون میده و داره کار میکنه ولی auto complete نداره.
jedi هم تکمیل میکرد با تب هم اینکه یه پنجره کوچیک باز میشد و auto complete پیشنهاد میداد.
jedi رو پاک کن. برای lsp-python از پکیجی که مایکروسافت ساخته استفاده کن. اونی که روی pypi هست به شدت کند هست
آره jedi رو که کامل پاک کردم.
از همون پکیج مایکروسافت دارم استفاده میکنم:
الآن company و company-lsp رو نصب کردم و auto complete هارو داره میاره.
راستی برای Habij ، یه Merge Request زدم. اولین بارمه این کارو میکنم، ببخشید اگه مشکلی داره.
بسیار عالی. می بینم اگر نکته ای بود می گم که درست کنی
سلام
با یه مشکل خیلی عجیب رو به رو شدم و چند ساعته دارم بهش ور میرم درست نمیشه
این کانفیگ lsp-python-ms داخل فایل init.el توی مسیر lib/extension/python هستش (fg42) (کامنتارو پاک کردم)
(ability lsp-python ()
(require 'lsp-python-ms)
(add-hook 'python-mode-hook
(lambda ()
(push 'company-lsp company-backends)
(lsp)
(setq lsp-ui-sideline-show-code-actions nil)))))
این کانفیگ منه برای python :
(require 'company-lsp)
(require 'lsp-python-ms)
(defun my-python--setup ()
(push 'company-lsp company-backends)
(lsp))
(defun my-python-load ()
(interactive)
(add-hook 'python-mode-hook 'my-python--setup))
(provide 'my-python)
حالا مشکل کجاست؟ توی fg42 بعد از وارد کردن دو حرف پنجره auto complete میاد برای من بعد از سه یا چهار حرف و کند تر هم میاد. دقیقا روی یک فایل و کاملا یکسان تست کردم.
چه طور ممکنه؟؟؟
بخاطر این هست که کمپانی مد FG42 یه سری سورس های دیگه هم برای کامپلیت کردن داره. و کند بودنش هم احتمال خیلی زیاد بخاطر اینه که شما sideline دارید که اینجوری غیر فغال می شه:
(setq lsp-ui-sideline-show-code-actions nil)
سلام
این سایدلاین غیر فعاله
در کل فکر کنم از fg42 استفاده کنم چون الآن دیگه خیلی از پکیج هاشو میشناسم و کم و بیش میتونم کانفیگش رو بخونم.
شما توی fg42 از Ido و برای M-x هم از Smex استفاده میکنید درسته؟ من یه مدت با Helm کار میکردم و به این نتیجه رسیدم که Ido بهتره، فقط یه قابلیتی که Helm داره و خیلی به دردم میخوره اینه که اگه interactive function ها key binding روشون ست شده باشه نمایش میده. میشه اینو به Ido اضافه کرد؟
FG42 این قابلیت رو داره
آره داره همین الآن دیدم
مال خودم نداشت
مرسی
قسمت پنجم:
مثل بقیه عالی بود.
دقیقا این سوال رو داشتم که توی auto complete های company چه طور میشه doc string رو دید که توی ویدیو گفتین با F1 و روی پایتون هم جواب داد، اما همونطور که خودتون هم گفتین با C-w توی پایتون نمیشه source رو دید. من کلا به این قابلیت دیدن source خیلی احتیاج دارم، حالا نه فقط توی auto complete های company اگه میتونستم یه key binding داشته باشم که cursor روی هر method ای بود با زدن اون source اون method رو میدیدم عالی میشد. توی IDE هایی مثل Intellij IDEA با نگه داشتن Ctrl و کلیک کردن روی method میشه این کار رو کرد.
اگر FG42 استفاده می کنی می تونه وقتی cursor روی هر کلمه ای هست ( منظور mouse cursor نیست ) با کلید C-u i
سورس اون سیمبل رو ببینی. البته من از dumbjump استفاده کردم و یه سری از پلاگین ها مثل پایتون و جاوا فانکشن های خودشون رو دارن ولی dumbjump اونجا هم کار می کنه