рдиреЗрдУрд╡рд┐рдо: рдП рдореЙрдбрд░реНрди рд╡рд┐рдо рдЯреЗрдХреНрд╕реНрдЯ рдПрдбрд┐рдЯрд░ рдХреНрд▓реЛрди

рд╡рд┐рдо рдмрдбрд╝реЗ рджрд░реНрд╢рдХреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдкрд╛рда рд╕рдВрдкрд╛рджрдХ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдХрд╛рд░реНрдпрдХреНрд░рдо 20 рд╕рд╛рд▓ рд╕реЗ рдЕрдзрд┐рдХ рдкреБрд░рд╛рдирд╛ рд╣реИ, рдлрд┐рд░ рднреА рдЗрд╕рдХреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдХреЛ рд╡рд┐рдореНрд╕рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд┐рдкрд┐рдпреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реБрдзрд╛рд░рдирд╛ рдЬрд╛рд░реА рд╣реИред рдирд┐: рд╢реБрд▓реНрдХ рд╡рд┐рдо 7.4 рд╕рдВрдкрд╛рджрдХ рдХрд╛ рдирд╡реАрдирддрдо рд╕рдВрд╕реНрдХрд░рдг рдЕрдЧрд╕реНрдд 2013 рдореЗрдВ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рджреЛ рджрд╢рдХреЛрдВ рдореЗрдВ, рд╡рд┐рдо рдПрдХ рднрдпрд╛рдирдХ рдЖрдХрд╛рд░ рдореЗрдВ рдмрдврд╝ рдЧрдпрд╛ рд╣реИ: C89 рдХреЛрдб рдХреА рд▓рдЧрднрдЧ 300,000 рд▓рд╛рдЗрдиреЗрдВред тАЬрдмрд╣реБрдд рдХрдо рд▓реЛрдЧ рдЗрд╕ рдХреЛрдб рдХреЛ рд╕рдордЭ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХреА рд╣рд┐рдореНрдордд рд░рдЦрддреЗ рд╣реИрдВред Vim рдореЗрдВ рдирдпрд╛ рдХреЛрдб рдФрд░ рдкреИрдЪ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рдПрдХрдорд╛рддреНрд░ рдЕрдиреБрдЪрд░ рдкреНрд▓рдЧрдЗрдХреЛ рдЗрдХреЛрд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд╕рд╛рде рддрд╛рд▓рдореЗрд▓ рдирд╣реАрдВ рд░рдЦ рд░рд╣рд╛ рд╣реИ, "рдмреНрд░рд╛рдЬреАрд▓ рдХреЗ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдерд┐рдпрд╛рдЧреЛ рдбреА рдЕрд░реБрдбрд╛ рдкрджрд┐рд▓реНрд╣рд╛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ Neovim рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдмрдирд╛рдпрд╛ - 21 рд╡реАрдВ рд╕рджреА рдХреЗ рд▓рд┐рдП рд╡рд┐рдо рдХрд╛ рдПрдХ рдЕрджреНрдпрддрди рдФрд░ рдмреЗрд╣рддрд░ рд╕рдВрд╕реНрдХрд░рдгред ред

рдиреЗрдУрд╡рд┐рдо рдкрд░рд┐рдпреЛрдЬрдирд╛ рдиреЗ рд╡рд┐рдо рд╕реНрд░реЛрдд рдХреЛрдб рдХреЛ рдЖрдХреНрд░рд╛рдордХ рд░реВрдк рд╕реЗ рдкрд░рд┐рд╖реНрдХреГрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рд╣реИред рдЙрджреНрджреЗрд╢реНрдп:

  1. рд╕рдорд░реНрдерди рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдФрд░ рдкреИрдЪ рдФрд░ рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЧрддрд┐ рдореЗрдВ рд╡реГрджреНрдзрд┐;
  2. рдХрдИ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рдмреАрдЪ рдХрд╛рдо рдХреЛ рд╡рд┐рддрд░рд┐рдд рдХрд░реЗрдВ;
  3. рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдЖрдзреБрдирд┐рдХ рдЬреАрдпреВрдЖрдИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ;
  4. рдХреЛрдкреНрд░реЛрд╕реЗрд╕ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирдП рдкреНрд▓рдЧ-рдЗрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдХрд╛рд░рдг рд╕рдВрдкрд╛рджрдХ рдХреА рд╡реНрдпрд╛рдкрдХрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ред рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ рд╕рдВрдкрд╛рджрдХ рд╕реЗ рдЙрдирдХреЗ рд╕реНрдкрд╖реНрдЯ рд╕рдорд░реНрдерди рдХреЗ рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдбреЗрд╡рд▓рдкрд░ рдиреЗ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдХрд┐ рдЙрд╕рдХрд╛ рд▓рдХреНрд╖реНрдп рд╡рд┐рдо рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдирд╛ рдФрд░ рдЖрдИрдбреАрдИ рдмрдирд╛рдирд╛ рдирд╣реАрдВ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдиреЗрдУрд╡рд┐рдо рдореЗрдВ рдЖрдИрдбреАрдИ рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ рд╣реИрдВред рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рдкреВрд░реЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдо рдпрд╛ рд╡рд┐рдорд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдореЙрдбрд▓ рдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдирд╣реАрдВ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдзрд┐рдХрд╛рдВрд╢ vimcript рдкреНрд▓рдЧрд┐рдиреНрд╕ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдВрдЧреЗред

рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмреЛрд▓рддреЗ рд╣реБрдП, рдпрд╣ рдПрдХ рдЖрдзреБрдирд┐рдХ cmake- рдЖрдзрд╛рд░рд┐рдд рдмрд┐рд▓реНрдб рд╕реНрд╡рдЪрд╛рд▓рди рдкреНрд░рдгрд╛рд▓реА рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ рдЧрдИ рд╣реИ, рд╡реАрдЖрдИ рдЗрдореНрдпреВрд▓реЗрд╢рди рдореЛрдб рдХреЛ рд╣рдЯрд╛ рджреЗрдВ рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдХреЛрдб рд╕рдорд░реНрдерди рдХреЛ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХреЛрдб рдХреЛ рднреА рд╣рдЯрд╛рддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдПрдХ рдЧрддрд┐рд╢реАрд▓ рд░реВрдк рд╕реЗ рдЬреБрдбрд╝рд╛ рд▓рд┐рдмрд╡ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛрдЧрд╛ рдЬреЛ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдкрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ I / O рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред

рдпрд╣ рдПрдХ рдХреЗ рд╕рдорд╛рди рдПрдХ рдиреМрдХрд░реА рдкреНрд░рдмрдВрдзрди рддрдВрддреНрд░ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдирдпрд╛ рдкреНрд▓рдЧ-рдЗрди рд╕рд┐рд╕реНрдЯрдо рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рд╣реИред рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд╕рдВрдкрд╛рджрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдореЗрдВ рдкреНрд▓рдЧ-рдЗрди рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд▓рдЧ-рдЗрди рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдШрдЯрдирд╛рдУрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ рдФрд░ рдирд┐рдпреЛрд╡рд┐рдо рдХреЛ рдХрдорд╛рдВрдб рднреЗрдЬ рд░рд╣рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрд╣ json-rpc рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рдПрдХ рдкреНрд▓рдЧрдЗрди рд╕рддреНрд░ рдХреА рддрд░рд╣ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред

plugin -> neovim: {"id": 1, "method": "listenEvent", "params": {"eventName": "keyPressed"}} neovim -> plugin: {"id": 1, "result": true} neovim -> plugin: {"method": "event", "params": {"name": "keyPressed", "eventArgs": {"keys": ["C"]}}} neovim -> plugin: {"method": "event", "params": {"name": "keyPressed", "eventArgs": {"keys": ["Ctrl", "Space"]}}} plugin -> neovim: {"id": 2, "method": "showPopup", "params": {"size": {"width": 10, "height": 2} "position": {"column": 2, "line": 3}, "items": ["Completion1", "Completion2"]}} plugin -> neovim: {"id": 2, "result": true}} 

рдЗрд╕ рддрд░рд╣ рдХреА рдпреЛрдЬрдирд╛ рдиреЗрдУрд╡рд┐рдо рдХреЛ рд▓рдЧрднрдЧ рдЕрд╕реАрдорд┐рдд рд╡рд┐рд╕реНрддрд╛рд░ рджреЗрддреА рд╣реИ рдФрд░ рд╕рд╛рде рд╣реА рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреА рд╕реНрдерд┐рд░рддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдореБрдЦреНрдп рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдЕрд▓рдЧ рд╣реЛрддреЗ рд╣реИрдВред

GUI рддрддреНрд╡ рдФрд░ рд╕рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╡рд┐рдЬреЗрдЯ рдореБрдЦреНрдп рдХреЛрдб рд╕реЗ рд╣рдЯрд╛ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗред GUI рдмрд╣реБрдд рдХреБрдЫ рдЙрд╕реА рддрд░рд╣ рд╕реЗ рдХрдиреЗрдХреНрдЯ рд╣реЛрдЧрд╛ рдЬреИрд╕реЗ рдкреНрд▓рдЧрдЗрдиреНрд╕ред рдЕрдВрддрд░ рдХреЗрд╡рд▓ рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдкреНрд▓рдЧрдЗрдиреНрд╕ рдХреЛ Neovim рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ Neovim рдХреЛ GUI рд╕реЗ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

  GUI | ---> Neovim | --->  1 | --->  2 | --->  3 

рд╣рд╛рдЗрдкреЛрдереЗрдЯрд┐рдХрд▓ рдЬреАрдпреВрдЖрдИ рд╕рддреНрд░ред

 gui -> vim: {"id": 1, "method": "initClient", "params": {"size": {"rows": 20, "columns": 25}}} vim -> gui: {"id": 1, "result": {"clientId": 1}} vim -> gui: {"method": "redraw", "params": {"clientId": 1, "lines": {"5": " Welcome to neovim! "}}} gui -> vim: {"id": 2, "method": "keyPress", "params": {"keys": ["H", "e", "l", "l", "o"]}} vim -> gui: {"method": "redraw", "params": {"clientId": 1, "lines": {"1": "Hello ", "5": " "}}} 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЙрдЪреНрдЪ-рд╕реНрддрд░реАрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рдЖрдзреБрдирд┐рдХ GUI рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмреЗрд╣рддрд░ рдПрдХреАрдХреГрдд рд╕рдВрдкрд╛рджрдХ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд▓рдЧрдЗрдиреНрд╕ рдЬреАрдпреВрдЖрдИ рдХреЗ рд╕рд╛рде рд╕реАрдзреЗ рдЗрдВрдЯрд░реЗрдХреНрд╢рди рдХрд░ рдкрд╛рдПрдВрдЧреЗ, рдЬреИрд╕реЗ рдХрд┐ рд╕рдмрд▓рд╛рдЗрдо рдореЗрдВ рдорд┐рдирд┐рдореИрдкред рд╕рдВрдкрд╛рджрдХ рдХреЛрд░ рдХреЛ рд╕рд░реНрд╡рд░ рдкрд░ рдЪрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдорд╢реАрдиреЛрдВ рдкрд░ рдХрдИ GUI рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЪрд▓рд╛рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред рд╕рдВрдкрд╛рджрдХ рдХреЛ рдЕрдиреНрдп рдХрд╛рд░реНрдпрдХреНрд░рдореЛрдВ рдореЗрдВ рдПрдореНрдмреЗрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреАрдпреВрдЖрдИ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдирд╡рдо рдХреЗ рд╕рднреА рд╡рд┐рдХрд╛рд╕ рдХреЛ рдЬреАрдердм рдкрд░ рдХрд┐рдП рдЬрд╛рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИред рджрд╛рди рд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ред

Source: https://habr.com/ru/post/In213517/


All Articles