Introduction
- Differences in tools for writing English words (e.g., Google Docs) versus code (e.g., IntelliJ IDEA)
- Importance of investing time in mastering a code editor
Learning a New Editor
- Start with a tutorial
- Use the editor for all text editing
- Look up better ways to do tasks
Choosing an Editor
Editor Wars
- Programmers have strong opinions on text editors
- Popular editors today: Visual Studio Code, Vim, … Fleet?
Vim
- Rich history, still actively developed
- Vim emulation modes in many tools
Philosophy of Vim
Vim’s Design
- Focused on reading/editing over writing
- Modal editor: different modes for inserting text vs manipulating text
- Programmable and avoids mouse usage
Modal Editing in Vim
Different Operating Modes
- Normal: moving around and making edits
- Insert: inserting text
- Others: Replace, Visual, Command-line
Mode Switching
<ESC>to switch to Normal mode- Other keys (
i,R,v,V,<C-v>,:) for different modes
Basics of Vim
Inserting Text
ito enter Insert mode<ESC>to return to Normal mode
Buffers, Tabs, and Windows
- Buffers for open files
- Tabs contain windows
- Windows show buffers
Command-line Mode
:in Normal mode to enter- Commands for file operations and quitting
Movement Commands
- Basic:
hjkl(left, down, up, right) - Words, lines, screen, file, line numbers, find, and search
Selection in Visual Modes
vfor VisualVfor Visual LineCtrl-vfor Visual Block
Editing Commands
d{motion},c{motion},x,s,u,<C-r>,y,p
Counts and Modifiers
- Combine commands with counts (
3w,5j) - Modifiers like
i(inner) anda(around)
Customizing Vim
~/.vimrcfor configuration- Starting point: well-documented basic config
Extending Vim with Plugins
- Built-in package management in Vim
- Favorite plugins: ctrlp.vim, ack.vim, nerdtree, vim-easymotion
Vim-mode in Other Programs
- Shell integration (Bash, Zsh, Fish)
- GNU Readline library
- Other software with vim-like keybindings
Advanced Vim
- Search and replace
- Multiple windows
- Macros
Resources for Learning Vim
vimtutor- Vim Adventures
- Vim Tips Wiki
- Practical Vim (book)
Topic 4
Fragments of Development Operations
Introduction to Build Systems
- The concept of a “build process” in projects
- Sequence of operations from inputs to outputs
- The role of build systems in automating these processes
What is a Build System?
- A tool to define dependencies, targets, and rules
- Manages and optimizes the build process
- Examples include
make, specialized tools for languages or larger projects
The Make Build System
- One of the most common build systems
- Uses a
Makefileto define rules, targets, and dependencies - Example of a simple
Makefile:
hello:
echo "Hello, World"How make Works
- Determines the necessary steps to build a target
- Avoids redundant builds by checking dependencies
- Common operations like building a PDF from LaTeX sources
Dependency Management
- Projects depend on external code or libraries
- Repositories and tools manage these dependencies
- Versioning ensures compatibility and stability
Semantic Versioning
- Version format: major.minor.patch
- Rules for updating each number based on changes
- Helps maintain compatibility and predictability
Lock Files and Vendoring
- Lock files specify exact versions used in a project
- Vendoring involves copying dependencies into the project
- Ensures control and consistency over external code
Continuous Integration Systems
Overview of CI Systems
- Automate tasks that run on code changes
- Common in larger projects for testing, deployment, etc.
- Examples: Travis CI, Azure Pipelines, GitHub Actions
CI Configuration
- Defined through files in the repository
- Specifies actions on events like push or pull request
- Automates testing, building, deploying, and more
Example: GitHub Pages
- Automatic deployment of websites on push to
master - Runs Jekyll to build the site, deploys to GitHub domain
- Simplifies website updates and maintenance